Настройка размера шрифта в ActiveReports Excel выполняется очень медленно

#excel #activereports

#excel #activereports

Вопрос:

Я экспортирую огромные объемы данных на лист Excel. Мы сталкиваемся с проблемами производительности при попытке правильно отформатировать данные для отчета в Active Reports. Я настроил некоторые базовые распечатки, чтобы определить, какие разделы кода занимают больше всего времени. Я разделил форматирование ячеек, установив значение ячеек.

 Private Sub SetSheetFormat(intRow As Integer, dDSheet As DDSheet)
    Dim startRow As Integer = 6
    Dim cells As Cells.DDCells = dDSheet.Cells(dDSheet.Cell(startRow, 0), dDSheet.Cell(intRow, 45))
    cells.FontSize = 8
    dDSheet.Cell(intRow, 47).SetValue((Date.Now - start).ToString())
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmDemands), dDSheet.Cell(intRow, ReportColumns.SI_SSDollars))
    cells.Alignment = Style.HorzAlignments.Right
    dDSheet.Cell(intRow, 48).SetValue((Date.Now - start).ToString())
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmDemands), dDSheet.Cell(intRow, ReportColumns.NetFcst))
    cells.FillColor = Color.FromArgb(255, 224, 192) 'light orange
    dDSheet.Cell(intRow, 49).SetValue((Date.Now - start).ToString())
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmTfrsOut), dDSheet.Cell(intRow, ReportColumns.KitComptUsage))
    cells.FillColor = Color.FromArgb(255, 255, 192) 'light yellow
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmProd), dDSheet.Cell(intRow, ReportColumns.PlannedTfrsIn))
    cells.FillColor = Color.FromArgb(amp;HC0FFC0) 'light green
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.TotalReceipts), dDSheet.Cell(intRow, ReportColumns.TotalReceipts))
    cells.FillColor = Color.FromArgb(amp;H80FF80) 'dark green
    dDSheet.Cell(intRow, 50).SetValue((Date.Now - start).ToString())
  

В электронной таблице примерно 7000 строк. Время, которое потребовалось для записи данных до их ввода этим методом, составило 6 секунд. Установка размера шрифта равным 8 заняла только 50 секунд. Есть ли лучший способ сделать это? Я думал, что применение его к нескольким ячейкам одновременно увеличит объем транзакций и будет более эффективным, но это не так.

ОБНОВЛЕНИЕ: Пожалуйста, обратите внимание, что мы не создаем эту книгу из PageReport или PageDocument. Мы записываем то, что хотим, непосредственно в рабочую книгу.

Комментарии:

1. вы имеете в виду продукт activereports от grapecity? какую версию вы используете? Я не распознаю столбцы отчета??

2. @GrapeCity Team Да, из GrapeCity. Reportcolumns — это перечисление, которое мы использовали для отслеживания имени столбца до номера столбца. Мы используем версию 10.

3. @GrapeCityTeam Вы знаете, что может быть причиной этого?

Ответ №1:

Вы используете SpreadBuilder для экспорта данных в файл Excel. В SpreadBuilder данные экспортируются ячейка за ячейкой в файле Excel, и поскольку у вас есть огромные объемы данных, на экспорт данных ушло очень много времени. Затем, чтобы изменить данные, снова приходится обходить каждую ячейку, а затем форматировать ячейку, чтобы это заняло 50 секунд. В основном проблема вызвана тем, что объем данных очень велик, а SpreadBuilder выполняет экспорт в Excel по ячейкам.

Лучшим способом может быть внесение изменений в поля отчета во время создания отчета или перед тем, как вы захотите экспортировать, а затем экспортировать с помощью фильтров экспорта / расширений рендеринга. Это единственный способ оптимизировать экспорт Excel в данном сценарии.

Комментарии:

1. Изначально мы вносили изменения при записи данных в каждую ячейку. Это заняло столько же времени. Я могу проверить запись данных в PageReport с помощью SpreadBuilder, но я уверен, что есть некоторые уникальные для SpreadBuilder функции, которые нам были нужны при первом написании кода. Все это также выполняется в памяти еще до того, как мы сохраним книгу в файл.

2. Да, вы можете проверить это при записи данных в PageReport и попытаться выполнить требования, внеся изменения при создании отчета. Вы можете поделиться своими наблюдениями, если столкнетесь с какой-либо проблемой. Что касается SpreadBuilder, я хотел бы сообщить вам, что это займет некоторое время, поскольку он работает по ячейкам, а в вашем случае объем данных огромен. Это предполагаемое поведение.

3. При просмотре PageReport выясняется, что для этого потребуется полностью переписать наш механизм создания отчетов. Если мне не хватает какой-либо документации, мы не можем просто сгенерировать и оформить отчет в коде. Это все привязка данных и использование генератора отчетов перед выполнением. Я думаю, что в настоящее время мы собираемся использовать некоторые решения с открытым исходным кодом.