概要
- C# をつかって「.xls」拡張子のエクセルファイルを書き込むが、参照できないURLがbookに含まれているときの処理について
使用バージョン
- .NETFramework 4.6.1
- NPOI 2.4.1
やりたいこと
- 一括で「.xls」ファイルに入っている指定のセルの書き込みをする
- 例:sheet1のC3に数字を書き込む
- "=sheet1!C3" と書かれているセルがあり、セルの内容を反映(セルの評価)したい
適用Source
var book = WorkbookFactory.Create(@"C:\sample.xls");
var sheet = book.GetSheet(XlsxSheet.SheetName);
//ブック全体の数式を評価
book.GetCreationHelper().CreateFormulaEvaluator()bookWriter.EvaluateAll();
エラーがおきる
- 以下エラー
- NPOI.Util.RuntimeException:Could not resolve external workbook name... NPOI.SS.Formula.Workbook.NotFoundException: Could not resoleve external workbook name...
推測される原因
- Excelの機能で、セルに対して他のファイルから読み取ったセルを代入することができるが
そのファイルパスが参照できない、開けない状態。
対策
var book = WorkbookFactory.Create(@"C:\sample.xls");
var sheet = book.GetSheet(XlsxSheet.SheetName);
var bookWriter = book.GetCreationHelper().CreateFormulaEvaluator();
//外部参照URLを無視
bookWriter.IgnoreMissingWorkbooks = true;
//ブック全体の数式を評価
bookWriter.EvaluateAll();
所感
- NPOIってJavaのPOIから移行してるってこともあり、POIのリファレンスをみると分かる
- ただNPOIとPOIは移行とはいえ、メソッドの名前やクラスの名前がイコールではないため、コピペは不可。
- ググっても「ignore」を使っている人がいなかったで上げてみました。初投稿です。誰かのためになれば幸いです。