XMLSS.NET

以前、Excel-XMLスプレッドシート(以降XMLSS)をASP.NETのビューから出力するエントリを紹介したが、実際にアプリケーションでXMLSSを読み書きするにはDOM+XPathなど、何らかのXMLをナビゲーションするためのAPIがあれば良い。しかし、それだとやはり今ひとつ扱いづらい。
なんとかAPIをラップしてオートメーション風にしたいな、自分で書こうかな、と思っていたが、やはり見つけてしまった(大抵のものは誰かが既に実装していたりする法則)

XmlSS.NET Spreadsheet Component — CodeGuru.com

記事が寄稿されたのは2004年だ。眼をつけるのが早いよなぁ。

内部ではXPathDocumentを生成してXPathNavigatorで内部をトラバースしながら、Excelのオブジェクトをコンポジションしていく。この手のラッパーでは常套手段であり、ソースコードを見れば何をしているかすぐに解る。

public Workbook CreateWorkboook()
{
    XPathNavigator rootNav = new XPathDocument(file, XmlSpace.Preserve).CreateNavigator();
    XmlNamespaceManager nsMgr = new XmlNamespaceManager(rootNav.NameTable);
    nsMgr.AddNamespace(SPREADSHEET_NS_PREFIX, SPREADSHEET_NS);
    nsMgr.AddNamespace(EXCEL_NS_PREFIX, EXCEL_NS);
    XPathExpression xpath = rootNav.Compile("ss:Workbook");
    xpath.SetContext(nsMgr);
    XPathNodeIterator wbNode = rootNav.Select(xpath);
〜

VB.NETの実装しか無いってのがあれだが、変換するのは容易いし、早速使わせて頂こう。

同様にOpenXMLをラップしたAPIも見つけたのだが、ちょっとしたことするにもOpenXMLのスキーマを知る必要があったので、諦めた。
汎用的にするため、Officeの全てのドキュメントをサポートするためには仕方が無かったのかもしれないが、OpenXMLのスキーマと仕様は数ヶ月の仕事には難解過ぎる。ExcelならXMLSSで必要十分だ。