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