IsiR_19 Ответов: 3

Как повысить производительность генерации excel


Привет Ребята

В настоящее время я генерирую отчеты в excel через vb.net.

В настоящее время процесс, который я использую, заключается в том, что я получаю данные из базы данных и сохраняю возвращенные данные в datatable

затем я перебираю каждую запись в datatable и добавляю каждый столбец в каждой записи на лист excel

Проблема в том, что когда отчет содержит большие данные, например 120 000 + записей, создание отчетов занимает довольно много времени, есть ли лучший способ ускорить производительность

Что я уже пробовал:

dim dt as new datatable ("транспортные средства")

ДТ = GetVehicledata()

для каждого dtrow в DT. строках
xSheet.Ячейки (RowDataStart, 4).значение = DtRow("REGNUM").Метод toString
xSheet.Ячейки (RowDataStart, 5).значение = DtRow("драйвер").Метод toString
xSheet.Ячейки (RowDataStart, 6).value = DtRow("STARTDATE").Метод toString
xSheet.Ячейки (RowDataStart, 7).value = DtRow("STARTTIME").Метод toString
xSheet.Ячейки (RowDataStart, 8).value = DtRow("ENDTIME").Метод toString
следующий

3 Ответов

Рейтинг:
27

Dave Kreskowiak

Если вы используете Office Interop (установите ссылку на Office PIA), вы ничего не можете сделать, чтобы ускорить его. Руководство, как известно, медленно.

Ваша альтернатива-сгенерировать файл Excel непосредственно с помощью "OpenXML SDK", или "ClosedXML SDK", или аналогичного.


Рейтинг:
2

Patrice T

Если предположить, что код имеет смысл, то это огромная экономия.
В этом коде, RowDataStart это константа, это означает, что вы можете перейти непосредственно к последнему транспортному средству и записать строку в лист Excel только один раз.


Рейтинг:
13

Andy Lanng

В зависимости от типов значений (если есть какие-либо формулы и т. д.) Вы можете записать свои данные в массив, а затем вставить их в диапазон.

Массив всегда должен быть 2d, даже если одно из этих измерений имеет длину всего 1; в вашем случае это не имеет значения, так как у вас будет 2d-массив для вставки