Can Spreadsheet :: WriteExcel可以更改单元格的格式而不修改其内容吗?

时间:2012-02-19 09:40:40

标签: perl excel format cpan perl-module

在我的Perl脚本中,我使用Spreadsheet::WriteExcel模块创建一个Excel文件。该文件包含一个表,其大小是动态的 - 即,我不知道在表已经创建之前它将有多少行。我希望表的最后一行具有稍微不同的格式(例如,其底部边框为“===”)。不幸的是,我不能在创建行时应用这种(不同的)格式,因为那时我还不知道它将是最后一行。

所以,我的问题是:我可以在不更改其内容的情况下更改现有单元格的格式吗?如果我将undef作为单元格值传递给$worksheet->write()方法,它只会用空白单元格覆盖单元格的内容。

3 个答案:

答案 0 :(得分:2)

您问题的直接答案是您无法在Spreadsheet::WriteExcel中修改已写入单元格的格式。这是Excel::Writer::XLSX的计划功能,但尚未到位。

因此,您需要以某种方式解决它,例如缓冲表数据,直到您准备好写入或一次缓冲一行,并且只有在有新行时才写入。

或者您可以打开compatiblilty_mode()并使用新的格式化数据覆盖最后一行。请注意,如果没有compatibility_mode(),则不建议使用此方法,因为Excel会在文件中抱怨重复和/或缺少数据。

或者,如@bvr所指出的那样设置行格式可能对您有用。

答案 1 :(得分:1)

除非您的数据对于内存来说太大,否则您可以先将表数据放入数组中,然后循环遍历数组以进行输出。您将可以访问数组中的任何元素,因此您将知道最后一行将是什么以及将包含哪些数据。

答案 2 :(得分:1)

您可以使用set_row方法将格式设置为任意行,而无需更改数据。