如何在工作表之后计算值.计算()?



我尝试了Gembox.SpreadSheet的试用版。

当我通过 for(( 或 Foreach(( 获取单元格[,].值时。 所以我认为在 Calculate(( 和获取 Cell[].value 之后,但这样也需要相同的时间。 当我获得单元格[].值时需要重新计算。

workSheet.Calcuate(); <- after this, values are Calculated, am i right?
for( int i =0; i <worksheet.GetUsedCellRange(true).LastRowIndex+1;++i)
{
~~~~for Iteration~~~
var value =  workSheet.Cells[i,j].Value; <- re-Calcuate value(?)
}

所以这里有一个问题。 我可以得到计算值吗?或者你们知道预计算功能或获得更多速度?

不幸的是,我不确定你到底在问什么,你能试着重新表述一下你的问题,以便更容易理解吗?

尽管如此,这里有一些信息,我希望你会觉得有用。
若要循环访问所有单元格,应使用以下方法之一:

1.

foreach (ExcelRow row in workSheet.Rows)
{
foreach (ExcelCell cell in row.AllocatedCells)
{
var value =  cell.Value;
// ...
}
}

阿拉伯数字。

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应用程序保存文件时,它将在其中保存最后计算的公式值。在这种情况下,您不必调用 Compute 方法,因为单元格中已有所需的值。
当您需要更新时,您应该调用计算方法,重新计算电子表格中的公式,例如在添加或修改某些单元格值之后。

最后,关于你的问题,很难理解,但尽管如此:

  • 我可以得到计算值吗?
    是的,该行代码var value = workSheet.Cells[i,j].Value;应该为您提供计算值,因为您之前使用了 Compute 方法。但是,如果您的公式目前不受 GemBox.电子表格计算引擎的支持,则它将无法计算该值。您可以在此处找到当前支持的 Excel 公式函数的列表。

  • 或者你们知道预计算功能或获得更多速度?
    我不知道"预计算函数"是什么意思,有关速度,请参阅本答案的第一部分。

最新更新