当我尝试打开/阅读电子表格(xls)时,出现以下错误:
比例必须大于或等于1
我使用以下代码打开并读取文件:
$filename = 'test.xls';
$spreadsheet = IOFactory::load($filename); //<-- ERRORS HERE
$worksheet = $spreadsheet->getActiveSheet();
::load
命令发生错误。
这不是数据问题 - 我可以将现有数据复制到新文件中并且它可以正常工作,因此必须是文件本身的问题。
我正在使用PHPSpreadsheet的v1.6.0,这是写作时的最新版本。
提前致谢!
编辑:
这个问题涉及PHPSpreadsheet,而不是这里列出的PHPExcel:PHPExcel Error: Scale must be greater than or equal to 1
虽然类似,但我的文件的XLSX版本按预期工作,因此需要创建一个单独的问题。 PHPExcel现在也被标记为正式死亡,因此将此问题添加到SO上的正确库/标记似乎是合乎逻辑的。
我已经找到了问题的解决方案(下面添加),这可能也适用于PHPExcel,但没有任何保证!
您可以使用 :
$spreadsheet = \IOFactory::load($filename);
好的,我找到了解决我特定问题的方法......
它需要编辑setZoomScale
函数,该函数可以在SheetView.php
中找到。
我文件中的缩放比例值为零,这引发了错误。新代码检查此代码,如果找到,则将其设置为1。
对于每个人来说,也许不是理想的解决方案,但需要处理:
public function setZoomScale($pValue)
{
/* NEW code that sets the zoom scale
------------------------------------------*/
//Zoom Scale of 0 causes error. If found, default pValue to 1.
if( $pValue == 0)
{
$pValue = 1;
}
/*----------------------------------------*/
// Microsoft Office Excel 2007 only allows setting a scale between 10 and 400 via the user interface,
// but it is apparently still able to handle any scale >= 1
if (($pValue >= 1) || $pValue === null)
{
$this->zoomScale = $pValue;
}
else
{
throw new PhpSpreadsheetException('Scale must be greater than or equal to 1.');
}
return $this;
}