我试图创建的事件序列是这样的:
- 我的 OpenXML 应用程序生成一个新的 Excel 文件,并用数据库中的数据填充它。
- 用户打开文件并转到订单表。
- 用户从客户下拉列表中进行选择。
- 在产品表上,有一个 VLOOKUP,它检查客户下拉菜单并根据所选客户名称显示可选的特殊产品。
- 返回订单表,产品下拉菜单显示自定义的产品列表。
我插入的公式:
string theFormula = "IFERROR( IF(VLOOKUP(CustomerNameRange, CustomerTable, 8, FALSE) = 0,\"\", VLOOKUP(CustomerNameRange, CustomerTable, 8, FALSE)),\"\")";
我用来插入的代码:
Row r = new Row();
r.RowIndex = (UInt32)index;
Cell c = new Cell();
c.CellReference = index;
c.DataType = new EnumValue<CellValues>(CellValues.String);
c.CellFormula = new CellFormula(theFormula);
c.CellFormula.CalculateCell = true;
r.AppendChild(c);
我用来强制工作表重新计算的代码:
CalculationProperties prop1 = workbookPart1.Workbook.GetFirstChild<CalculationProperties>();
prop1.ForceFullCalculation = true;
prop1.FullCalculationOnLoad = true;
prop1.CalculationMode = CalculateModeValues.Auto;
prop1.CalculationCompleted = false;
但是,这些额外的重新计算代码似乎都不起作用。特殊产品 VLOOKUP 不会成功重新计算,直到用户手动编辑该单元格。如何强制 Excel 像平常一样对待插入的公式单元格?
我知道 OpenXML 不会也不打算进行重新计算(它是一个文档编辑器,而不是一个成熟的电子表格引擎)。