是否有可用于处理(读取)Excel 2003 XML文档的库?

我们有一种情况, Excel的XML 2003格式被广泛用于file upload到第三方系统。 需要从这些文件中提取一些信息用于其他处理。 是否有任何可用于处理Excel 2003 XML格式的库?

进一步的细节:这些XML文件的格式已经由第三方定义,我们不能改变它。 另外,数据本身不是表格或任何一致的格式。

我以前使用System.Xml.Linq从这些XML电子表格的非常简单的版本中提取数据(基本上是一行,列索引方法)。 现在需要的数据来自更复杂的版本,其中包括合并单元格,命名范围等。

这个处理是在一个服务器上完成的,因此Interop不是基于这个臭名昭着的有关Excel的MS KB的一个选项

有人也可以build议一个方法来处理这些文件?

最终的解决scheme需要我创build一个XSLT来从文件中提取所需的数据,并转换为一个非常简单的XML数据表示forms。 我还创build了表示使用XmlSerializer.Deserialize()生成的XML的反序列化的对象模型的类。

但是,为了有效地工作,需要对源Excel的XML文件进行更新,以包括需要提取的单元格的命名范围。使用名称范围允许更简单的XSLT,但是最大的代码异味是依赖于我不控制的文件中的命名范围的存在。

代码的高级概述

  XPathDocument doc = new XPathDocument("path to Excel xml file"); XslCompiledTransform xslt = new XslCompiledTransform(); StringReader sr = new StringReader(Resources.XSLT); // embedded resource, the xslt is read in as a string XmlTextReader xs = new XmlTextReader(sr); xslt.Load(xs); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true, Encoding = Encoding.UTF8, OmitXmlDeclaration = false }; MemoryStream memStream = new MemoryStream(); using (XmlWriter writer = XmlWriter.Create(memStream, settings)) { xslt.Transform(doc, writer); // the simple xml..almost there } MyCustomClass curve; { XmlSerializer deSerializer = new XmlSerializer(typeof(MyCustomClass)); // reset needed to beginning of mem stream since current position is the last write position memStream.Position = 0; curve = (MyCustomClass)deSerializer.Deserialize(memStream); } 

你有没有考虑过使用你的工作室的xsd.exe工具来生成轻松阅读XML文件的类?

它不包含任何智能逻辑来组合字段当然 – 但好处是,你将不需要build立自己的阅读逻辑或安装互操作库。

检查CodePlex上的Excel数据读取器是否满足您的要求。 我正在使用它将简单的Excel数据列表导入到我们的应用程序中。