【发布时间】:2016-02-11 11:50:07
【问题描述】:
在 PHPExcel 中导入从 Google 表格导出的 .xlsx 文件时,PHPexcel 方法 $worksheet->getHighestDataColumn() 和 $worksheet->getHighestDataRow() 都返回 Google Docs 中设置的最大值,包括完全空的单元格,通常为 26x1000。
据我所知,当在 Google 表格/Excel 中打开它们时,这些单元格与常规的空 Excel 单元格一样是空的,即没有空格。
也许 Google 表格使用与 Excel 稍有不同的方法来“保留”列和行(后者是动态生成的)。
我想获得最高的非空行,以便在循环行时不会不必要地分配大量内存。尊重我使用的格式,我可以在空行中保存一些评估,但最后,我不得不简单地遍历所有行并检查所有单元格是否为空。
【问题讨论】:
-
NULL 和空字符串 (
"") 都是 MS Excel 单元格的有效值,这就是 PHPExcel 的getHighestDataColumn()方法能够识别它们的原因 -
但是识别包含这些值的单元格的唯一方法是加载工作表并检查单元格内容,所以我看不到任何节省内存的实用方法,除了将阅读器修改为测试值并丢弃为 NULL 或 "" 的单元格
-
@MarkBaker 感谢您的快速回复。只是从 Google 导入的工作表显然与 Excel 中的工作表在如何“保留”空(完全未触及的自动生成的单元格)方面略有不同。也许,如果 Google 表格变得更普遍,
getHighestNonemptyColumn方法将是可取的(但我已经为自己的具体情况考虑了这一点)。 -
从我在github上Cells class的
PHPOffice/PhpSpreadsheet的源代码中可以看到,无论如何,内部循环遍历每个单元格 -
不幸的是,由于 xlsx 格式的特性,PHPExcel 总是将整个 xlsx 文件加载到内存中(而且非常消耗),因此,我建议移至 .csv,因为它已集成在 PHP 中,而您可以轻松实现惰性和优化处理。
标签: php google-sheets phpexcel