2012-02-19 81 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

相关问题