技巧

将 Excel 数据转换成 XML

从最流行的电子表格程序中提取数据

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 技巧

敬请期待该系列的后续内容。

此内容是该系列的一部分:技巧

敬请期待该系列的后续内容。

并不是每一份文档最初都是用 XML 写的,这可能与您想像的正好相反。事实上,大多数文档都是用其他一些工具准备出来,然后再转换成 XML 的。许多文档来源于 DB2 这样的关系数据库,或者来源于 Microsoft Office 应用程序,比如 Word,或是 Excel。

我发现很多业务中都用 Excel 编辑和准备数据。这个工具简单易用,得到了广泛采用,其表格格式对各种信息都十分适合,比如产品清单、姓名清单、金融数据、统计数据等等。人们通常会把 Excel 电子表格用电子邮件发给用户,让用户填写其中的空白。

获取数据

当人们从某个私有应用程序中收集和准备数据的时候,通常会遇到如何恢复数据的问题。幸好在 Excel 中不存在这样的问题。尽管对 Excel 文件格式的定义并没有公开,我们还是可以用一些方法从电子表格中提取出 XML 信息。本篇技巧文章将回顾一下可用的方法,并着重指出每一种解决方案的优缺点。

XMLSS

最新版本的 Excel(包括 Excel 2002 和 Excel XP)可以将电子表格导出为 XML。虽然您无法选择其中使用哪些标签,但是的确可以得到一个有效的 XML 文档。您可以用包括 XSLT 样式表在内的任意一种 XML 工具来处理它。这种格式称为 XMLSS

如果符合下列条件,这就是最简单的方法:

  1. 您的用户具有最新版本的 Excel,并且
  2. 您在工作站上处理 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 全球站点上的 英文原文.
  • 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 文档的方法。
  • developerWorksXML 专区中可以找到更多有关 XML 的资料。要获取 XML 技巧专栏最新的文章列表,请访问 技巧汇总页面
  • 了解如何才能成为 IBM 认证的 XML 及其相关技术的开发人员

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML
ArticleID=21315
ArticleTitle=技巧: 将 Excel 数据转换成 XML
publish-date=12012003