如何使用 Gembox.Spreadsheet 调整 Excel Table 的大小?
How can I resize an Excel Table using Gembox.Spreadsheet?
我正在使用 Gembox.Spreadsheet 将现有工作簿中的 Excel Table 内容替换为来自 C# 代码的新内容。有时数据的行数比现有的 table 多,有时则更少。要调整 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()
。我还没有描述我需要删除行的情况,但我预计会有同样的情况。
我在写入之前就知道我的数据有多大,那么如何在较小的操作中准备 table 使其具有正确的大小?有引用 table 的公式和枢轴 tables,我不想破坏它们。
使用刚刚发布的最新版本(完整版: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 的性能 方法。
我正在使用 Gembox.Spreadsheet 将现有工作簿中的 Excel Table 内容替换为来自 C# 代码的新内容。有时数据的行数比现有的 table 多,有时则更少。要调整 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()
。我还没有描述我需要删除行的情况,但我预计会有同样的情况。
我在写入之前就知道我的数据有多大,那么如何在较小的操作中准备 table 使其具有正确的大小?有引用 table 的公式和枢轴 tables,我不想破坏它们。
使用刚刚发布的最新版本(完整版: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 的性能 方法。