技巧: 将 Excel 数据转换成 XML
来源:互联网 发布:监控管理平台软件 编辑:程序博客网 时间:2024/06/03 17:24
从最流行的电子表格程序中提取数据
文档选项将此页作为电子邮件发送
级别: 中级
Benoit Marchal (bmarchal@pineapplesoft.com), 顾问, Pineapplesoft
2003 年 12 月 01 日
不管您是否相信,并不是每份文档一开始就是用 XML 写的。在这篇技巧文章中,Benoit Marchal 向我们解释了如何将数据从 Excel 文件中解放出来,并用 XML 来处理它们。然后比较了各种不同解决方案的优缺点。
并不是每一份文档最初都是用 XML 写的,这可能与您想像的正好相反。事实上,大多数文档都是用其他一些工具准备出来,然后再转换成 XML 的。许多文档来源于 DB2 这样的关系数据库,或者来源于 Microsoft Office 应用程序,比如 Word,或是 Excel。
我发现很多业务中都用 Excel 编辑和准备数据。这个工具简单易用,得到了广泛采用,其表格格式对各种信息都十分适合,比如产品清单、姓名清单、金融数据、统计数据等等。人们通常会把 Excel 电子表格用电子邮件发给用户,让用户填写其中的空白。
获取数据
当人们从某个私有应用程序中收集和准备数据的时候,通常会遇到如何恢复数据的问题。幸好在 Excel 中不存在这样的问题。尽管对 Excel 文件格式的定义并没有公开,我们还是可以用一些方法从电子表格中提取出 XML 信息。本篇技巧文章将回顾一下可用的方法,并着重指出每一种解决方案的优缺点。
XMLSS
最新版本的 Excel(包括 Excel 2002 和 Excel XP)可以将电子表格导出为 XML。虽然您无法选择其中使用哪些标签,但是的确可以得到一个有效的 XML 文档。您可以用包括 XSLT 样式表在内的任意一种 XML 工具来处理它。这种格式称为 XMLSS。
如果符合下列条件,这就是最简单的方法:
- 您的用户具有最新版本的 Excel,并且
- 您在工作站上处理 XML 数据。
第一种条件是显而易见的,第二个则需要多解释一下。
假设您设置好一台服务器,用来收集和处理统计数据。您的用户用 Excel 准备好数据,然后将这些电子表格上传到服务器上,以供后续处理。第一步是将电子表格转换成 XML。一种解决方法是在 Excel 中打开电子表格,然后将其导出为 XMLSS 格式。我曾经见过一些公司用这种办法处理文档,虽然是可行的,但是有一点必须牢记:Excel 的设计工作环境是工作站,而不是服务器。
这样的解决方案尽管能够实现功能,但是却有可能不像您期望的那样稳定。在其他问题当中,电子表格转换本身就可能成为瓶颈,因为转换过程很难实现为多线程。最糟糕的情况是,每一请求都在单个 Excel 副本中排起队来。同时,这种方法也限制了您的主机系统,因为 Excel 仅仅能在 Windows 和 MacOS 中使用。
CSV 文件
第一种替代的方法是,不操作实际的电子表格,而是改为操作 CSV(comma-separated value)文件。CSV 是用来交换电子表格文件的常用格式。任何适当的电子表格都可以通过 CSV 文件导出和导入。
此外,很多可以处理电子表格的第三方产品也都支持 CSV。例如,大多数会计软件包都可以处理 CSV 文件。尽管 CSV 文件不是 XML,但用 XI 之类的工具也很容易将其转换成 XML 文件(参阅 参考资料)。TopXML 站点上也包含了纯 XSLT 转换方法的算法(参阅 参考资料)。
使用 CSV 文件对于服务器的吸引力更大一些。首先您不再被限制在某种特定的平台上,而是为用户提供了更多的选择。用户现在可以用 Lotus 1-2-3 以及其他电子表格工具,也可以使用很多能够识别 CSV 格式的第三方工具。
这种方法唯一的缺点是,用户必须花费额外的步骤,将数据保存到 CSV 中。我从实践中发现这很少出现问题,但您的情况可能会不一样。
无格式转换
最后一种方法是用特殊的库来读取 Excel 文档。Excel 文件格式并没有官方文档,但是一些第三方机构曾对其进行逆向工程。他们还生成了一些用于解码 Excel 文件的库(参阅 参考资料)。下面列出一些可用的 API:
- Java Excel这个 API 是我最喜欢的一种,因为它是可移植的,可以很好地读取 XML 文档,还可以转换成 XML。
- XML::Excel这是一个 Perl API,用于将 Excel 文档转换成 XML。
- OpenOffice其中包括用于读取 Excel 文档的 C++ 库。您可以用这些库作为将 Excel 转换成 XML 的基础。
- Apache POI它支持在 Java 代码中读取 Excel 文件。同样,您也可以把它用作 Excel 转换成 XML 的基础。
上面列表只是一些有代表性的例子,其他工具可用于不同平台。
转换 Excel 文件能带来三方面的好处:
- 文件可以运行于任何平台上。
- 这些库可以很容易地与服务器集成。
- 用户不需要自己导出数据。
这种解决方案最主要的风险就是,没有哪一种库能够十全十美,您会发现有些电子表格并不能很好地转换。您需要针对您的项目测试出最好的库。
回页首
开始行动
Excel 是一种流行的工具软件,可用于准备各种想用 XML 处理的数据。幸运的是,本篇技巧文章向您展示了很多从 XML 中获取数据的方法。最好的选择有赖于您的项目的特定需求。
不管您是如何转换电子表格的,您将发现最终得到的 XML 文档和您期望的相差甚远。也许里面会包含一些不需要的单元格,或甚至连 XML 词汇表都不是您想要的。您不用为此担心,大多数情况下,您只需要准备一个简单的 XSLT 样式表,就可以过滤掉不需要的数据,或是对一些标签进行重命名。
参考资料
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
- 参与 Benoit Marchal 的使用 XML 专栏 的 讨论论坛。
- Don Day 的“ Hands-on XSL”( developerWorks,2000 年 3 月)是关于 XSLT 的快速培训指南。其中讲到 XSLT 是在格式转换之后对文档进行后期处理的最好工具。
- 请阅读 Benoit Marchal 的“ Importing text as XML with XI”( developerWorks,2002 年 4 月),介绍了一种将 CSV 文件转换成 XML 的工具。
- 下载 Java Excel API,这是一个很好的工具,可以将 Excel 文件转换成 XML。
- 试用 XML::Excel Perl 模块,这是一个简单的工具,可用于 XML 对 Excel 进行处理。
- 看看 OpenOffice,其中包括了解析 Excel 文件的库。
- Apache 的 Jakarta POI是一种处理 Excel 文件的 Java API。它可用作您自己的 Excel-XML 转换器的基础。Cocoon 使用 Jakarta POI 将 XML 转换成 Excel。
- 可以从 TopXML 的 XSLT Stylesheets页面中找到大量有用的 XSLT 算法,其中也包括处理非 XML 文档的方法。
- 从 developerWorks的 XML 专区中可以找到更多有关 XML 的资料。要获取 XML 技巧专栏最新的文章列表,请访问 技巧汇总页面。
- 了解如何才能成为 IBM 认证的 XML 及其相关技术的开发人员。
关于作者
Benoit Marchal 是一位比利时籍顾问。他是 XML by Example, Second Edition 以及其他 XML 书籍的作者。Benoit 能够为您的 XML 项目提供帮助。可以通过 bmarchal@pineapplesoft.com或他的个人站点 marchal.com与他联系。
- 技巧: 将 Excel 数据转换成 XML
- java 将EXCEL表格数据转换成XML格式
- java 将EXCEL表格数据转换成XML格式
- java 将EXCEL表格数据转换成XML格式
- 将excel表格数据转换为xml文本数据
- java将XML数据转换成Map
- 快速将pdf转换成excel的技巧与方法
- 办公必备的技巧-如何将excel转换成pdf
- 将Excel数据转换成FlatBuffer数据的方法
- 将大量有规律txt文本数据转换成xml格式,在导入excel,生成excel文件,在导入spass中,对数据进行分析
- 技巧: 用 HTML Tidy 将 HTML 转换成 XML
- 技巧: 用 HTML Tidy 将 HTML 转换成 XML
- Excel转换成Xml
- 将指定Excel文件中的数据转换成DataTable对象
- asp将数据库的数据转换成excel导出
- java将excel单元格数据转换成sql语句
- 将Excel中的数据转换成sql Insert语句
- 将Excel中的数据转换成sql Insert语句
- Java Persistence API
- 一行显示两列记录循环算法
- 如何用VB编写代理服务器中的黑、白名单(急用)
- Spring 2 和 JPA 简介
- JavaScript 網頁打印處理
- 技巧: 将 Excel 数据转换成 XML
- Struts2 ajax
- 基于JSON格式报文的AJAX通用实现
- SQL操作全集
- java中对日期的加减操作
- 奇怪的梦
- 用户数据库的用户权限备份
- Java的网络爬虫