PHPSpreadsheet:比例必须大于或等于1

PHPSpreadsheet: Scale must be greater than or equal to 1

当我尝试 open/read 电子表格 (xls) 时,出现以下错误:

Scale must be greater than or equal to 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 中找到。

我文件中的 zoomscale 值为零,这引发了错误。新代码对此进行检查,如果找到,则将其设置为 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;
}