[]
在GcExcel Java中,用户可以使用IRange界面的setFormula方法 将公式设置为单元格区域。
若要在工作表中添加自定义名称并为区域设置公式,请参考以下示例代码。有关如何添加自定义名称的更多信息,请参见定义名称。
// Add custom name and set formula to range
worksheet.getNames().add("test1", "=Sheet1!$A$1");
worksheet.getNames().add("test2", "=Sheet1!test1*2");
worksheet.getRange("A1").setValue(1);
// C6's value is 1.
worksheet.getRange("C6").setFormula("=test1");
// C7's value is 3.
worksheet.getRange("C7").setFormula("=test1 + test2");
// C8's value is 6.283185307
worksheet.getRange("C8").setFormula("=test2*PI()");
注意: 公式值存储在缓存中。用户可以通过调用IRange界面的Dirty方法来验证缓存的值。此方法消除了指定范围以及与其相关的所有范围或整个工作簿的缓存值。
GcExcel Java支持RIC1行号列标表示法,以使用户能够轻松快速地执行计算。若要设置引用样式,可以使用IWorkbook界面的setReferenceStyle方法 。
为了了解如何在工作簿中设置行号列标表示法,请参考以下示例代码。
// set workbook's reference style to R1C1.
workbook.setReferenceStyle(ReferenceStyle.R1C1);
由公式计算的值首先存储在缓存中,在检索单元格值时返回缓存结果。 当工作表包含大量数据时,这些数据取决于公式的结果;更改单元格的值, 重新计算所有公式单元格,并再次存储缓存的值,这可能会降低工作表的性能。
因此,GCExcel在Workbook 类中 提供setDeferUpdateDirtyState方法,该方法参数为true时, 单元格发生变化后,不会立即更新公式单元格的脏状态
参考以下示例代码实现对公式单元格脏状态的推迟更新。
Workbook wb = new Workbook();
wb.open("formulas.xlsx");
//Defer the update of dirty cell state
wb.setDeferUpdateDirtyState(true);
for (int i = 0; i < 1000; i++)
{
wb.getWorksheets().get(0).getRange(i, 0).setValue(i);
}
//Resume the update of dirty cell state
wb.setDeferUpdateDirtyState(false);
限制
如果工作簿DeferUpdateDirtyState设置为True, 则GcExcel不会立即更新公式单元格的脏状态。 此时,其他功能(如图表等)的参考范围不会变脏, 因此它们的缓存不会更新。如果检索这些功能的状态, 则它们在该特定时间点可能不正确。