【问题标题】:Spreadsheet::ParseExcel row_range differs from gnumericSpreadsheet::ParseExcel row_range 与 gnumeric 不同
【发布时间】:2013-05-30 22:06:58
【问题描述】:

我无法让Spreadsheet::ParseExcel 解析由gnumeric 生成的.xls 电子表格,我认为问题出在gnumeric。当仅使用 285 行时,ParseExcel 的 row_range() 方法返回 (0, 500)。

我尝试选择单元格 A1 - I285,然后选择 文件 > 打印区域 > 设置打印区域,然后使用我的 Perl 脚本保存和处理 .xls 文件,但没有任何效果。

该文件实际上包含两个工作表。一个正确计算行数,而另一个没有。我创建了两个工作表,但不知道我可能会做些什么不同。

【问题讨论】:

    标签: perl gnumeric parseexcel


    【解决方案1】:

    当仅使用 285 行时,ParseExcel 的 row_range() 方法返回 (0, 500)。

    Spreadsheet::ParseExcel 从存储最大和最小行和列值的 Excel 文件中的二进制记录中读取 row_range() 数据。它不会遍历工作表来计算这些值。

    因此,如果 row_range() 将 (0, 500) 报告为正在使用的行范围,那么这些值就是存储在该记录中的值。

    差异的根源可能是包含格式但没有数据的行。 Excel 区分“空”单元格和“空白”单元格。 “空”单元格是不包含数据的单元格,而“空白”单元格是不包含数据但包含格式的单元格。 Excel 存储“空白”单元格,但忽略“空”单元格。

    我尝试选择单元格 A1 - I285,然后选择文件 > 打印区域 > 设置打印区域,然后使用我的 Perl 脚本保存和处理 .xls 文件,但没有任何效果。

    打印区域对row_range() 报告的范围没有影响。

    如果您确实想将文件减少到包含行的 285 个数据,请从 286-501 中选择行,删除它们,然后保存文件。

    或者,将您的程序设置为忽略仅包含包含空白数据的单元格的行。

    【讨论】:

      【解决方案2】:

      我怀疑它会计算包含不可打印字符的行数,但除非您发布代码,否则我无法确定。

      如果是不可打印的字符,请尝试在导致问题的任何循环中插入这个坏男孩:

      next unless $cell;
      

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2011-10-25
        • 1970-01-01
        • 2014-11-19
        • 2011-10-14
        相关资源
        最近更新 更多