rksoftware

Visual Studio とか C# とかが好きです

ClosedXML で作った Excel ファイルが DioDocs で扱えない

.NET では ClodesXML というライブラリで Excel ファイルを作ることができます。

他にも .NET で Excel を扱うライブラリとして、最近注目の DioDocs があります。

DioDocs について詳しくは次の素晴らしい記事を読んでください。

このブログでも、何度か試して記事にしています。

■ 組み合わせて動かない

この ClosedXMLDioDocs ですが、組み合わせては使えないようです。全ての組み合わせパターンを試したわけではありません、--というかこの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 ファイル

f:id:rksoftware:20190210195128j:plain

□ DioDocs で編集した Excel ファイル

f:id:rksoftware:20190210195146j:plain f:id:rksoftware:20190210195209j:plain

この分野の素人なので、何が正しいのかは Office に詳しい方に任せるとしてひとまずメモを書き残しておきます。