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

本文关键字:Excel 2003 XML 文档 读取 用于 处理 是否 | 更新日期: 2023-09-27 17:50:15

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

进一步说明:这些XML文件的格式已经由第三方定义,我们不能更改它。此外,数据本身不是表格式的,也不是任何一致的格式。

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

这个处理是在服务器上完成的,因此互操作不是一个基于服务器上Excel的臭名昭著的MS KB的选项

谁能建议一种处理这些文件的方法?

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

最终的解决方案要求我创建一个XSLT来从文件中提取所需的数据,并将其转换为非常简单的数据XML表示。我还创建了代表对象模型的类,以便使用XmlSerializer.Deserialize()对生成的XML进行反序列化。

但是,为了使其有效工作,需要对源Excel XML文件进行更新,以包含需要提取的单元格的Named Ranges。使用Name Ranges可以实现更简单的XSLT,但是最大的代码气味是依赖于我无法控制的文件中Named Ranges的存在。

代码的高级概述

   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文件的类?

它当然不会包含任何用于组合字段的智能逻辑——但好处是您不需要构建自己的读取逻辑或安装互操作库。

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