Как я могу изменить размер таблицы Excel, используя Gembox.Spreadsheet? - PullRequest
0 голосов
/ 10 июля 2019

Я заменяю содержимое таблицы Excel в существующей книге новым содержимым из кода C #, используя Gembox.Spreadsheet. Иногда в данных больше строк, чем в существующей таблице, иногда их меньше. Чтобы изменить размер таблицы, моей первой попыткой было постепенное добавление или удаление строк. Однако это может быть медленным, если разница в количестве строк достаточно велика. Вот код:

var workbook = ExcelFile.Load("workbook.xlsx");
var table = workbook.Sheets["Sheet1"].Tables["Table1"];

var lastWrittenRowIndex = 0;
for(var rowIndex = 0; rowIndex < data.Count; rowIndex++)
{
  // If the table isn't big enough for this new row, add it
  if (rowIndex == table.Rows.Count) table.Rows.Add();

  // … Snipped code to add information in 'data' into 'table' … 

  lastWrittenRowIndex = rowIndex;
}

// All data written, now wipe out any unused rows
while (lastWrittenRowIndex + 1 < table.Rows.Count)
{
  table.Rows.RemoveAt(table.Rows.Count - 1);
}

Добавление профилировщика показывает, что самая медленная операция - table.Rows.Add(). Я еще не описал ситуацию, когда мне нужно удалить строки, но я ожидаю того же.

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

1 Ответ

1 голос
/ 12 июля 2019

Попробуйте еще раз с этой последней версией, которая была только что выпущена (Полная версия: 45.0.35.1010):
https://www.gemboxsoftware.com/spreadsheet/downloads/BugFixes.htm

Он имеет метод перегрузки Table.Rows.Add, который принимает значение.
Тамтакже схожи для Insert и RemoveAt, см. следующую страницу справки:
https://www.gemboxsoftware.com/spreadsheet/help/html/Methods_T_GemBox_Spreadsheet_Tables_TableRowCollection.htm

В последний раз, как FYI, вы также можете дополнительно установить следующее:

workbook.AutomaticFormulaUpdate = false;

Это также должно улучшить производительность.
Обратите внимание, что установка этого свойства на false также улучшает производительность всех ExcelWorksheet.Rows и ExcelWorksheet.Columns insert и удалить методы.

...