【Aspose.Cells for .NET】CalculateFormulaをTRUE設定時のPDF変換で値が不一致となる事象

■利用製品
Aspose.cell for .NET(v25.8)

■事象
Excel ファイルをPDFに変換する際、
CalculateFormula を TRUE に設定すると、一部のセルの値が変換元ファイルと一致しない。
一方、CalculateFormula を FALSE に設定した場合は、問題なく変換できる。

詳細は以下の添付ファイルをご参照ください。
20250908_48137.zip (1.6 MB)
・変換元ファイル:「0000110219_Asposedemo.xlsx」
・関連資料:「AsposeQA_48137.xlsx」にて、事象の詳細と原因に関する情報が確認できる。

■質問事項
CalculateFormula: TRUE で変換後のPDFが変換元ファイルと完全に一致するように、
何か対応策や改善方法はありますでしょうか。
恐れ入りますが、ご教示のほどよろしくお願いいたします。

@caoyuan

ご質問への回答

CalculateFormula = true で PDF へ変換したときにセルの値が元の Excel と食い違う
という現象は、Aspose.Cells の数式計算エンジンで再計算が走る ことが原因です。
Excel の計算結果と Aspose.Cells のエンジンが完全に一致しないケース(例:

  • 互換性の低い関数(GETPIVOTDATAINFORTD など)
  • カスタム(UDF)関数や外部リンク
  • 文字列比較でロケール依存する場合)

があると、PDF 作成時に再計算された結果が Excel で表示されている値と若干異なることがあります。


推奨する対策

1. 変換前に手動で計算し、PDF 変換時は再計算を無効化する

using Aspose.Cells;
using Aspose.Cells.Rendering;

// ① Excel をロード
Workbook wb = new Workbook("0000110219_Asposedemo.xlsx");

// ② 必要に応じて計算エンジンのバージョンを合わせる
//    (Excel 2016 互換にしたい場合は以下を有効化)
// wb.Settings.CalcEngineVersion = CalcEngineVersion.Version2016;

// ③ 手動で計算
wb.CalculateFormula();

// ④ PDF 変換オプションを作成し、再計算をオフにする
PdfSaveOptions pdfOptions = new PdfSaveOptions
{
    // ここで再計算を無効にする
    CalculateFormula = false
};

// ⑤ PDF に保存
wb.Save("output.pdf", pdfOptions);
  • ポイント
    • wb.CalculateFormula() → Excel と同じタイミングで結果を取得。
    • PdfSaveOptions.CalculateFormula = false → PDF 生成時に再計算を行わないので、手動で計算した結果がそのまま使用されます。

2. 数式エンジンのバージョンを Excel に合わせる

wb.Settings.CalcEngineVersion = CalcEngineVersion.Version2016;   // 例: Excel 2016 互換
  • Aspose.Cells は 2010、2013、2016、2021 の各バージョン用エンジンを提供しています。
  • 変換元の Excel が作成されたバージョンと同じエンジンを選択すると、計算結果の差異が縮小します。

3. 問題が残る関数・シナリオを特定する

関数/シナリオ 対応策
GETPIVOTDATAINFORTD など 事前に値を コピー & ペースト(値貼り付け) してから PDF に変換
カスタム UDF 事前に CustomFunction を実装し Aspose.Cells に登録(詳細は Docs)
外部リンク すべて リンク切れ にしてから CalculateFormula を実行

手順まとめ

  1. ロードWorkbook wb = new Workbook(path);
  2. エンジンバージョン合わせ(任意)wb.Settings.CalcEngineVersion = …;
  3. 手動計算wb.CalculateFormula();
  4. PDF オプション作成PdfSaveOptions opt = new PdfSaveOptions { CalculateFormula = false };
  5. 保存wb.Save(pdfPath, opt);

この手順で 「Excel の表示結果」⇔「PDF の表示結果」 が一致することが期待できます。


参考リンク


追加情報が必要な場合

  • 問題の出ているシートやセルの 具体的な数式(例:=VLOOKUP(A1,B:C,2,FALSE)
  • 使用している Excel のバージョン(2007/2010/2016/2021 など)
  • ロケール設定(日本語ロケールでのみ差異が出るかどうか)

上記情報をご提供いただければ、さらに詳細な調査・チューニングが可能です。


ご不明点や追加のサンプルコードが必要な場合は遠慮なくお知らせください。
引き続き、Aspose.Cells のご活用をサポートさせていただきます。

@caoyuan,

サンプルのExcelファイルと詳細なスクリーンショットをありがとうございます。

初期テストの結果、提供いただいたテンプレートExcelファイルとサンプルコードを使用することで、指摘された問題を再現することができました。PdfSaveOptions.CalculateFormulaをTRUEに設定してExcelファイルをPDFに変換すると、スクリーンショットの通り値が一致しないことが判明しました。一方で、これをFALSEに設定すると問題は解消されます。

Workbook wb = new Workbook("e:\\test2\\0000110219_Asposedemo.xlsx");
Aspose.Cells.PdfSaveOptions pdfOptions = new Aspose.Cells.PdfSaveOptions()
{
    CalculateFormula = true

;
wb.Save("e:\\test2\\out1.pdf"), pdfOptions);

この問題については、徹底的な評価が必要です。内部の問題追跡システムに以下の新しいチケットを登録しました。修正はFree Support Policiesに記載されている条件に従って提供されます。

問題ID: CELLSNET-58994

優先的なサポートが必要な場合は、Paid Support Servicesを通じて直接アクセスできる有料サポート管理チームをご利用ください。

1 Like

@caoyuan,

この度、あなたの問題(チケットID: “CELLSNET-58994”)が解決されたことをお知らせします。修正や機能強化は、2025年10月上旬にリリース予定の次回バージョン(Aspose.Cells v25.10)に含まれる予定です。新バージョンが公開され次第、このスレッドで通知いたします。

ご注意ください:
一部のテキスト値は、日本の元号カレンダーでフォーマットされた日付値を表しています。この問題は、それらのテキストを日時値に解析する必要があったために発生しました。期待される結果を得るには、修正版(Aspose.Cells v25.10)を「ja-JP」ロケールで使用する必要があります。環境のデフォルトロケールが「ja-JP」でない場合、ユーザーは数式の計算やPDFへのエクスポートを行う前に、Workbookに対して地域またはCultureInfoを指定する必要があります。

1 Like

@amjad.sahi
ご連絡いただきありがとうございます。
承知いたしました。
では、Aspose.Cells v25.10がリリースされましたら、早速検証を進めさせていただきます。

@caoyuan
フィードバックありがとうございます。どういたしまして。v25.10がリリースされましたら、引き続き最新情報をお知らせいたします。

1 Like