1

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

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

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

于 2013-05-30T22:50:16.330 回答
0

我怀疑它正在计算带有不可打印字符的行,但是除非您发布代码,否则我无法确定。

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

next unless $cell;
于 2013-05-30T22:41:46.800 回答