不幸的是,我不确定您到底在问什么,您能否尝试重新表述您的问题以便更容易理解?
不过,这里有一些信息,希望对您有用。
要遍历所有单元格,您应该使用以下方法之一:
1.
foreach (ExcelRow row in workSheet.Rows)
{
foreach (ExcelCell cell in row.AllocatedCells)
{
var value = cell.Value;
// ...
}
}
2.
for (CellRangeEnumerator enumerator = workSheet.Cells.GetReadEnumerator(); enumerator.MoveNext(); )
{
ExcelCell cell = enumerator.Current;
var value = cell.Value;
// ...
}
3.
for (int r = 0, rCount = workSheet.Rows.Count; r < rCount; ++r)
{
for (int c = 0, cCount = workSheet.CalculateMaxUsedColumns(); c < cCount; ++c)
{
var value = workSheet.Cells[r, c].Value;
// ...
}
}
我相信他们所有人都会有几乎相同的表现。
但是,根据电子表格的内容,最后一个可能会慢一些。这是因为它不仅仅只遍历分配的单元格。
例如,假设您有一个有 2 行的电子表格。第一行是空的,没有数据,第二行有 3 个单元格。现在,如果您使用 1. 或 2. 方法,那么您将仅遍历第二行中的这 3 个单元格,但如果您使用 3. 方法,那么您将遍历第一行中的 3 个单元格(以前没有分配,现在它们是因为我们访问了它们),然后通过第二行的 3 个单元格。
现在关于计算,请注意,当您使用某些 Excel 应用程序保存文件时,它会将最后计算的公式值保存在其中。在这种情况下,您不必调用Calculate 方法,因为您已经在单元格中有所需的值。
当您需要更新、重新计算电子表格中的公式时,您应该调用Calculate 方法,例如在您添加或修改某些单元格值之后。
最后,关于您的问题,很难理解,但是:
我可以获取计算值吗?
是的,那行代码var value = workSheet.Cells[i,j].Value;
应该为您提供计算值,因为您之前使用了 Calculate 方法。但是,如果您有 GemBox.Spreadsheet 的计算引擎当前不支持的公式,那么它将无法计算该值。您可以在此处找到当前支持的 Excel 公式函数列表。
或者你们知道预计算功能或获得更多速度?
我不知道“预计算函数”是什么意思,关于速度,请参考这个答案的第一部分。