簡體   English   中英

如何用Perl讀取Excel文件?

[英]how to read an excel file with Perl?

Spreadsheet :: ParseExcel可以很好地工作,但是我需要一種方法來讀取沒有它的文件,因為我無法安裝任何PM或CPAN模塊,所以請說“開箱即用的Perl”。 有沒有人建議我入門?

沒有它們,使用CPAN模塊相對困難的任務實際上非常困難。

首先,Excel二進制數據(BIFF)以另一種稱為OLE復合文檔的二進制文件格式存儲。 這就像文件中的文件系統,並且BIFF數據可能不會順序存儲。 因此,開始時,您必須編寫一個解析器以獲取數據。

提取原始BIFF數據后,您必須對其進行解析以查找單元格數據。 這稍微容易些,但仍然存在一些困難,例如字符串存儲在哈希表中,而不是單元格數據。 和普通數字沒有區別的日期。 以及合並單元格中的數據。 而且所有內容仍為二進制,並且位掩碼控制數據結構的含義。

幸運的是,所有這些頭痛都已被其他人*痛苦,並被包裹在一個模塊中,因此沒有其他人必須忍受它們。

因此,即使您的管理員不會為您安裝模塊,也有很多方法可以在本地安裝模塊或什至在本地安裝perl ,因此您不必打擾它們。 最后,這可能是一個更簡單的解決方案。

*我部分。

OpenDocument是一個ISO標准,因此您可以閱讀該規范並為其編寫自己的解析器。

之所以存在CPAN模塊,是因為有些事情人們希望做的事情(有些簡單,有些復雜)不適合成為核心語言的一部分。 解析Excel電子表格就是其中之一(較復雜的電子表格之一)。

您應該解決阻礙安裝模塊幫助的任何障礙。 它可能是管理性的(在這種情況下,您需要游說以更改策略),可能是技術性的(在這種情況下,您可能只需要了解local::lib

將電子表格導出到csv文件,並在有或沒有Text::CSV情況下進行解析。

我將基於@mob的有關Text :: CSV的答案。 不久前 ,我在CPAN上發現了Text:CSV :: Slurp ,並立即進行了轉換。 它使用帶有標題行的CSV文件,並返回hashrefs的arrayref,其中鍵是標題行中的名稱。 顯然,這並非在所有情況下都有效,但是如果這樣做,您的代碼很簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM