-3

我可以在不使用任何模块的情况下读取 excel 文件吗?我试着像读取一个普通文件并打印二进制字符;也许是因为编码?

但读取 csv 文件工作正常。

4

3 回答 3

9

Excel 文件是二进制文件,而 2007 年之前的格式显然很复杂。我相信.xlsx文件实际上是压缩的 XML,因此解压缩它们应该会产生人类可读的东西,但我从未尝试过。为什么你不想使用模块呢?

一些进一步的阅读,如果你有兴趣:

http://joelonsoftware.com/items/2008/02/19.html
http://en.wikipedia.org/wiki/Office_Open_XML_file_formats

于 2012-06-14T02:24:27.737 回答
6

我可以在不使用任何模块的情况下读取 excel 文件吗?

理论上是的。在实践中没有。

Excel XLS 文件是二进制文件中的二进制文件。第一步是从 OLE COM 文档容器中解析 Excel BIFF 数据。这些数据不一定按顺序排列。

然后您必须解析 Excel BIFF 数据,允许版本之间的差异、具有不同编码的共享字符串表以及以解析器不友好的方式映射大型数据记录的 CONTINUE 块。

Excel XLSX 格式更容易一些,因为它是 Zip 容器中的 XML 文件的集合。但是,如果您不使用模块,那么即使这样也会很痛苦。

处理 Excel 文件的 Perl 模块代表了数百个工时。期望投入类似数量的工作来避免它们。

于 2012-06-14T08:36:36.007 回答
5

为什么你不能使用模块?

您可以尝试找出 Excel 电子表格的格式,为其编写代码,然后在您的程序中使用它。也许把它写成一个模块并提交给 CPAN。等一等!那里已经有这样的模块了!

CPAN 的全部目的是防止您不得不重新发明轮子。您需要阅读 Excel 电子表格,并且有人已经完成了艰苦的工作来弄清楚如何做到这一点,并免费提供给您。价值 40,000 美元1,免费为您服务!CPAN 系统使安装模块相当简单。你运行cpan命令。没有真正的理由避免使用可以为您节省数百小时工作时间的模块。

而且,您避免使用哪种类型的模块?是所有模块,还是只是标准发行版中不包含的模块。我不想认为您不使用类似File::CopyData::Dumper仅仅因为它们是模块的东西,即使它们默认包含在大多数 Perl 发行版中。


1想象一下,雇用一个团队编写代码来转换 Excel 文件,以便 Perl 程序可以读取该文件。他们必须弄清楚文件格式的来龙去脉,为各种边缘情况编写代码,并通过各种测试运行它以确保它确实有效。如果我们不包括图表、嵌入式内容和远程数据访问等内容,粗略估计大约需要 200 个工时,但这只是因为它实际上已经记录在案。

于 2012-06-14T02:55:50.087 回答