【问题标题】:Can Spreadsheet::WriteExcel change the format of a cell without modifying its contents?Spreadsheet::WriteExcel 可以在不修改其内容的情况下更改单元格的格式吗?
【发布时间】:2012-03-10 00:41:51
【问题描述】:

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

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

【问题讨论】:

    标签: perl excel format cpan perl-module


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我确实使用compatibility_mode()。你的意思是我应该缓冲表格的最后一行,表格完成后再用新的格式重写?不,这不适合我当前的算法。顺便说一句,我不想​​使用 Excel::Writer::XLSX 模块,因为我想创建 Excel97 样式的文件,而不是新格式。好的,所以我接受我的问题的答案是“无法完成”。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 据我从文档中了解到,这将设置整行的格式。这看起来会非常难看。我想更改部分行的格式 - 只更改表格占用的部分。
      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多