0

我正在使用 Gembox.Spreadsheet 将现有工作簿中的 Excel 表格内容替换为 C# 代码中的新内容。有时数据的行数比现有表多,有时数据的行数更少。为了调整表的大小,我的第一次尝试是逐步添加或删除行。但是,如果行数差异很大,这可能会很慢。这是代码:

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(). 我还没有描述我需要删除行的情况,但我预计会这样。

我在写入之前知道我的数据有多大,那么如何在较小的操作中准备表格以使其具有正确的大小?有引用表格的公式和数据透视表,我不想破坏它们。

4

1 回答 1

1

使用刚刚发布的最新版本重试(完整版:45.0.35.1010):
https ://www.gemboxsoftware.com/spreadsheet/downloads/BugFixes.htm

它有一个Table.Rows.Add需要计数的重载方法。
也有类似的InsertRemoveAt请参阅以下帮助页面:
https ://www.gemboxsoftware.com/spreadsheet/help/html/Methods_T_GemBox_Spreadsheet_Tables_TableRowCollection.htm

最后,仅供参考,您还可以另外设置以下内容:

workbook.AutomaticFormulaUpdate = false;

这也应该提高性能。
请注意,将此属性设置为false还可以提高 allExcelWorksheet.RowsExcelWorksheet.Columns insertremove方法的性能。

于 2019-07-12T12:58:21.137 回答