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

问题描述 投票:0回答:2

当我尝试打开/阅读电子表格(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,但没有任何保证!

php phpspreadsheet
2个回答
0
投票

您可以使用 :

$spreadsheet = \IOFactory::load($filename);

0
投票

好的,我找到了解决我特定问题的方法......

它需要编辑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;
}
© www.soinside.com 2019 - 2024. All rights reserved.