我正在使用Gembox.Spreadsheet用C#代码中的新内容替换现有工作簿中的Excel Table内容。有时数据比现有表具有更多的行,有时数据具有更少的行。要调整表的大小,我的第一个尝试是逐步添加或删除行。但是,如果行数之差很大,这可能会很慢。这是代码:
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()
。我还没有介绍需要删除行的情况,但是我也希望如此。
在写入之前,我知道我的数据有多大,那么如何通过较小的操作将表准备为正确的大小?有引用该表的公式和数据透视表,我不想破坏它们。
答案 0 :(得分:1)
再次尝试使用刚刚发布的最新版本(完整版本: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
与仅供参考一样,您还可以设置以下内容:
workbook.AutomaticFormulaUpdate = false;
这也应该改善性能。
请注意,将此属性设置为false
还可以提高所有ExcelWorksheet.Rows
和ExcelWorksheet.Columns
insert 和 remove 方法的性能。