0

我试图创建的事件序列是这样的:

  1. 我的 OpenXML 应用程序生成一个新的 Excel 文件,并用数据库中的数据填充它。
  2. 用户打开文件并转到订单表。
  3. 用户从客户下拉列表中进行选择。
  4. 在产品表上,有一个 VLOOKUP,它检查客户下拉菜单并根据所选客户名称显示可选的特殊产品。
  5. 返回订单表,产品下拉菜单显示自定义的产品列表。

我插入的公式:

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 不会也不打算进行重新计算(它是一个文档编辑器,而不是一个成熟的电子表格引擎)。

4

1 回答 1

0

解决方案是不以编程方式输入公式,而是将公式永久地放在工作表上。

于 2014-01-16T19:56:18.427 回答