.NET では ClodesXML というライブラリで Excel ファイルを作ることができます。
他にも .NET で Excel を扱うライブラリとして、最近注目の DioDocs があります。
DioDocs について詳しくは次の素晴らしい記事を読んでください。
このブログでも、何度か試して記事にしています。
■ 組み合わせて動かない
この ClosedXML と DioDocs ですが、組み合わせては使えないようです。全ての組み合わせパターンを試したわけではありません、--というかこの1パターンしか試していないのですが--。
少なくとも、 ClosedXML で作った Excel ファイルを DioDocs で編集すると Save
で例外が発生してしまいます。
NullReferenceException
オブジェクト参照がオブジェクト インスタンスに設定されていません。
□ 検証コード
const string filename = @"out\ClosedXml.xlsx"; const string outfilename = @"out\DioDocsExcel.xlsx"; {// ClosedXML で Excel ファイルを作成 var book = new ClosedXML.Excel.XLWorkbook(); var sheet = book.AddWorksheet("New Sheet"); sheet.Cell(2, 2).Value = "サラダチキン"; sheet.Cell(2, 2).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Medium; sheet.Cell(2, 2).Style.Border.BottomBorderColor = ClosedXML.Excel.XLColor.Red; book.SaveAs(filename); } {// DioDocs で Excel ファイルを編集して別名保存 var book = new GrapeCity.Documents.Excel.Workbook(); book.Open(filename); { var sheet = book.Worksheets.First(); sheet.Cells[0, 0].Value = "ロースかつ定食"; } { var sheet = book.Worksheets.Add(); sheet.Cells[0, 0].Value = "回らないお寿司"; } book.Save(outfilename);
■ とりあえず Excel ファイルを直接編集してみる
ClosedXML で作った Excel ファイルの拡張子を .zip に変更して中の xml ファイルを編集してみます。
□ \xl\_rels\workbook.xml.rels ファイル
ファイル内部の
Target="/xl/theme/theme1.xml"
といった属性の /xl/
を削除し
Target="theme/theme1.xml"
とします。
□ \xl\styles.xml
ファイル内部の
<x:styleSheet ...>...</x:styleSheet>
といった要素の x:
を削除し
<styleSheet ...>...</styleSheet>
のようにします。また
xmlns:x=
といった属性の :x
を削除し
xmlns=
のとします。
□ \xl\worksheets\sheet1.xml
ファイル内部の
<x:worksheet...>...</x:worksheet>
を
<worksheet...>...</worksheet>
に
xmlns:x=
を
xmlns=
にします。
次の属性があれば削除します。
<pageSetup ... orientation="default" ...
<pageSetup ...
□ \xl\sharedStrings.xml
ファイル内部の
<x:sst ...>...</x:sst>
を
<sst ...>...</sst>
に
xmlns:x=
を
xmlns=
にします。
■ 読み込んで編集
このように編集して、また zip にすると DioDocs で扱えるようになりました。
□ ClosedXML で作成した Excel ファイル
□ DioDocs で編集した Excel ファイル
この分野の素人なので、何が正しいのかは Office に詳しい方に任せるとしてひとまずメモを書き残しておきます。