2012-09-18 63 views
0

當我處理類和對象時,我總是感到困惑。由於我試圖瞭解Spreadsheet::ParseExcel模塊,我有它的類和對象有些疑惑:Spreadsheet :: Percel中的ParseExcel模塊

我的疑問是:

隨着$parser= Spreadsheet::ParseExcel->new();,我們爲Spreadsheet::ParseExcel創建一個對象,並在此之後,我們將創建對象爲Spreadsheet::ParseExcel::Workbook
爲什麼我們不能直接爲Spreadsheet::ParseExcel::Workbook創建對象並開始解析?

感謝

回答

4

爲什麼我們不能直接創建對象的電子表格:: ParseExcel的::工作簿,並開始解析

這是一個合理的問題,並在舊版本的電子表格:: ParseExcel的出現了一條Spreadsheet::ParseExcel::Workbook->Parse()方法那就是那樣做的。 (*)

用戶通常只會將Excel文件視爲工作簿。但是,文件格式還包含元數據(作者,創建日期等)和獨立於工作簿數據的vba宏等數據。

由於文件中數據的物理分割,可能會導致解析器與工作簿的邏輯分割。

或者它可能是允許報告文件分析錯誤,而不是僅返回未定義的工作簿對象。無論哪種方式,其他人可能選擇以不同的方式對界面進行建模,但這是原作者選擇的內容。這不完全直觀,但它的工作原理。

(*)現在不推薦使用此方法,因爲它不允許對文件進行錯誤檢查。

2

想想Spreadsheet::ParseExcelSpreadsheet::ParseExcel::Workbook像他們只是不同的類型,如整型和字符串,這兩者都是標量的,但你不能,比如說,它們相乘,雖然他們可以在某些情況下進行交互。例如。 length()應用於字符串會爲您提供字符串的整數長度。同樣,Spreadsheet::ParseExcel::parse()爲您提供Spreadsheet::ParseExcel::Workbook。它們受常用名稱空間的約束,但它們完全不同,Spreadsheet::ParseExcel是解析器,而Spreadsheet::ParseExcel::Workbook是工作簿。

相關問題