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で必要十分だ。