4

やあ、

XML SDK を使用して、Excel ファイルの一部のセルを更新しています。

これは、特定のテキストのセルを更新するために使用するコードです (そして、正常に機能します)。

WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, sheetname);

spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;

spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;

    if (worksheetPart != null)
    {
       Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex);
       cell.CellValue = new CellValue(text);
       cell.DataType = new EnumValue<CellValues>(CellValues.Number);
       // Save the worksheet.
       worksheetPart.Worksheet.Save();
    }

一方、Excelファイルを再度開き、数式が前のセルに基づいている他のセルから更新された値を取得したいのですが、次の行でもそれを行うことができません:

spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;

spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;

更新された値を取得できない理由を知っていますか?

ありがとう

よろしく。

ホセ

4

2 に答える 2

2

ここで Vincent の回答を参照してください: OpenXML - セルの更新後に Excel シートを更新する

Open XML SDK は、数式の計算結果を更新しません。それができるのは Excel (または他の表計算ソフトウェア) だけです。したがって、ForceFullCalculation と FullCalculationOnLoad を true に設定したとしても、スプレッドシート ファイルの読み込み時に完全な計算を強制して実行するように Excel に指示するだけです。

これが、常に「古い」値を取得する理由です。語るべき「新しい」価値がないからです。

これをテストするために、(Cell クラスの) CellValue を設定して、CellFormula をそのままにして "3.14159" と言うことができます。セルの値を具体的に「3.14159」に設定しても、Excel は数式の正しい値を計算して表示します。[もちろん、数式が PI に評価される場合を除きます...]

これを解決するには、式を読み込んで結果を計算する計算エンジンが必要です。または、スプレッドシートを保存し、Excel を (相互運用モードで) 実行してすべての数式を計算しますが、そもそも Open XML SDK を使用する目的に反します。

于 2013-10-12T00:39:36.337 に答える
2

数式を含むすべてのセルに対して以下の関数を実行します。

public void ReCalcuateFormula(Cell cell)
{
    if (cell.CellFormula != null)
        cell.CellFormula.CalculateCell = new BooleanValue(true);
}
于 2013-04-30T20:22:16.970 に答える