【问题标题】:how to read an excel file with Perl?如何用 Perl 读取 excel 文件?
【发布时间】:2012-03-17 19:15:50
【问题描述】:

Spreadsheet::ParseExcel 工作正常,但是我需要一种方法来读取没有它的文件,可以说是“开箱即用 Perl”,因为我无法安装任何 PM 或 CPAN 模块。有没有人建议让我开始?

【问题讨论】:

  • 完全确定...不是超级用户,请求被拒绝
  • 您可以使用模块,而无需以 root 身份安装它们。

标签: perl


【解决方案1】:

使用 CPAN 模块是一项相对容易的任务,但没有它们实际上会非常困难。

首先,Excel 二进制数据 (BIFF) 以另一种称为 OLE 复合文档的二进制文件格式存储。这就像文件中的文件系统,BIFF 数据可能不是按顺序存储的。因此,首先您必须编写一个解析器来获取数据。

提取原始 BIFF 数据后,您必须对其进行解析以查找单元格数据。这稍微容易一些,但仍然存在一些困难,例如将字符串存储在远离单元格数据的哈希表中。以及与普通数字无法区分的日期。以及合并单元格中的数据。而且一切仍然是二进制的,位掩码控制着数据结构的含义。

幸运的是,所有这些头痛都被其他人*并包裹在module中,因此没有其他人必须忍受它们。

因此,即使您的管理员不会为您安装模块,也有很多方法可以在本地 install modules 甚至 install perl,这样您就不必打扰他们了。最后,这可能是一个更简单的解决方案。

* 我的一部分。

【讨论】:

  • Mcnamara 先生,我是您工作的忠实粉丝,我会听取您的建议并继续安装模块。
【解决方案2】:

OpenDocument is an ISO standard 这样您可以阅读规范并为它编写自己的解析器。

CPAN 模块的存在是因为人们想做的很多事情(有些简单,有些复杂)不适合作为核心语言的一部分。解析 Excel 电子表格就是其中之一(更复杂的之一)。

您应该修复阻止您安装模块以提供帮助的任何障碍。它可能是管理性的(在这种情况下,您需要游说以更改政策),也可能是技术性的(在这种情况下,您可能只需要了解local::lib

【讨论】:

  • 感谢您的建议,但不是我正在寻找的答案。
  • 抱歉,我以为我看到在早期的 cmets 中可以选择导出为 CSV。我现在明白了,我错了。
【解决方案3】:

将电子表格导出为 csv 文件,并使用或不使用 Text::CSV 对其进行解析。

【讨论】:

  • 感谢您的建议,这实际上是我想要做的.. 读取文件并通过 perl 将其导出为 CSV。我需要以编程方式执行此操作。
  • 可以下载XLS2CSV吗?
  • 是的,我可以,但它有什么用?还不如在excel上点击文件另存为csv。
  • 不是XLS2CSV 一个命令行工具(我可能是错的)?然后你用system 在 Perl 脚本中运行它。
  • 那么其他 xsl2csv 呢:wagner.pp.ru/~vitus/software/catdoc ?
【解决方案4】:

我将基于@mob 关于 Text::CSV 的上述答案。不久前,我在 CPAN 上找到了Text:CSV::Slurp,并立即转换。它需要一个带有标题行的 CSV 文件,并返回一个 hashref 的数组引用,其中键是标题行中的名称。显然,这并非在所有情况下都有效,但如果有效,您的代码很简单:

my $slurp = Text::CSV::Slurp->new;
my $data = $slurp->load(file => $filename);
for my $record (@$data) {
    ...
}

【讨论】:

  • 谢谢,问题是我必须解析 XLS 文件而不是 CSV
猜你喜欢
  • 2011-01-09
  • 1970-01-01
  • 2013-09-19
  • 2013-05-14
  • 1970-01-01
  • 2017-01-02
  • 2013-11-14
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多