#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 выясняется, что для этого потребуется полностью переписать наш механизм создания отчетов. Если мне не хватает какой-либо документации, мы не можем просто сгенерировать и оформить отчет в коде. Это все привязка данных и использование генератора отчетов перед выполнением. Я думаю, что в настоящее время мы собираемся использовать некоторые решения с открытым исходным кодом.