2012-02-19 37 views
2

在我的Perl腳本中,我使用Spreadsheet::WriteExcel模塊來創建一個Excel文件。該文件包含一個表,其大小是動態的 - 即,我不知道它將具有多少行,直到表已被創建。我希望表格的最後一行具有稍微不同的格式(例如,其底部邊界爲「===」)。不幸的是,在創建行時,我不能應用這種(不同的)格式,因爲那時我還不知道它會是最後一行。Can Spreadsheet :: WriteExcel更改單元格的格式而不修改其內容?

所以,我的問題是:我可以更改已經存在的單元格的格式而不更改其內容嗎?如果我將undef作爲單元值傳遞給$worksheet->write()方法,它只是用空白單元格覆蓋單元格的內容。

回答

2

您的問題的直接答案是,您無法修改Spreadsheet::WriteExcel中已寫入單元格的格式。這是Excel::Writer::XLSX的計劃功能,但尚未到位。

因此,您需要以某種方式解決它,例如緩衝表數據,直到您準備好寫入或緩衝行,並且只有在您有新行時才寫入。

或者您可以打開compatiblilty_mode()並用新的格式化數據覆蓋最後一行。請注意,不建議在沒有compatibility_mode()的情況下使用此方法,因爲Excel會報告文件中的重複和/或缺失數據。

或者,如@bvr指出的那樣設置行格式可能適合您。

+0

我確實使用'compatibility_mode()'。你的意思是我應該緩衝表中的最後一行,並在表完成後用新格式重新寫入它?不,這不符合我目前的算法。 順便說一句,我不想​​使用'Excel :: Writer :: XLSX'模塊,因爲我想創建Excel97風格的文件,而不是新的格式。 好的,所以我會接受我的問題的答案是「它不能做」。 – Vess 2012-02-20 06:47:37

1

除非數據對於內存太大,否則可以先將表數據放入數組中,然後遍歷數組以輸出。您可以訪問數組中的任何元素,以便您知道最後一行的內容以及其中的數據類型。

1

您可以使用set_row方法將格式設置爲任意行而不更改數據。

+0

據我所知,從文檔中可以設置整行的格式。這看起來非常醜陋。我想改變一部分行的格式 - 只有表格佔用的部分。 – Vess 2012-02-20 06:55:44

相關問題