使用PHPexcel廉价地查找最高的非空列/行(在GoogleSheets导出中)

使用PHPexcel廉价地查找最高的非空列/行(在GoogleSheets导出中),php,google-sheets,phpexcel,Php,Google Sheets,Phpexcel,在PHPExcel中导入Google Sheets exported.xlsx文件时,PHPExcel方法$worksheet->getHighestDataColumn()和$worksheet->getHighestDataRow()都返回Google文档中的最大设置,包括完全空的单元格,通常为26x1000 据我所知,在Google Sheets/Excel中打开单元格时,单元格与常规空白Excel单元格一样为空,即没有空格 也许Google Sheets使用的“保留”列和行的方法与Exc

在PHPExcel中导入Google Sheets exported.xlsx文件时,PHPExcel方法
$worksheet->getHighestDataColumn()
$worksheet->getHighestDataRow()
都返回Google文档中的最大设置,包括完全空的单元格,通常为26x1000

据我所知,在Google Sheets/Excel中打开单元格时,单元格与常规空白Excel单元格一样为空,即没有空格

也许Google Sheets使用的“保留”列和行的方法与Excel(动态生成)略有不同


我希望得到最高的非空行,这样在循环行时就不会不必要地分配大量内存。关于我使用的格式,我可以在空行中保存一些计算结果,但最后,我不得不简单地循环所有行并检查所有单元格是否为空。

如果您愿意在Google Apps脚本中创建自定义函数,请看一下这个答案。在导出之前使用此选项,以便知道要输入多少行。它查找单个列的最后一行。然而,由于它基于速度,您可能会发现它比其他方法遍历每一列更快

对于您的脚本,请在forEach循环上尝试Math.max,该循环遍历myLastRow()的结果:


我注意到您没有指定列在结束之前是否有空单元格。上面的链接确实要求所有单元格都不为null(以谷歌工作表的术语)。

null和空字符串(
“”
)都是MS Excel单元格的有效值,这就是为什么PHPExcel的
getHighestDataColumn()
方法可以识别它们,但识别包含这些值的单元格的唯一方法是加载工作表,并检查单元格内容,因此我看不到任何实际的节省内存的方法,只能通过修改读卡器来测试值并丢弃空单元格或“@MarkBaker感谢您的快速响应。只是从Google导入的工作表与Excel导入的工作表在如何“保留”空单元格(完全未触及、自动生成的单元格)方面有点不同。也许,如果Google Sheets变得越来越普遍,一个
GetHighestNoneEmptyColumn
方法将是可取的(但我已经为我的具体案例涵盖了这一点),由于xlsx格式的特殊性,PHPExcel总是将整个xlsx文件加载到内存中(这非常耗时),因此,我建议将其迁移到.csv,因为它集成在PHP中,您可以轻松实现延迟和优化处理。