PHPSpreadsheet:小数位数必须大于或等于1

时间:2019-02-11 10:06:00

标签: php phpspreadsheet

当我尝试打开/阅读电子表格(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中使用,但不提供任何担保!

2 个答案:

答案 0 :(得分:0)

您可以使用:

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

答案 1 :(得分: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;
}