5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【C#】NPOIを使って「.xls」の外部参照URLを無視する方法

Posted at

概要

  • 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();
                                         

エラーがおきる

  • 以下エラー

error.png

  • 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」を使っている人がいなかったで上げてみました。初投稿です。誰かのためになれば幸いです。
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?