PHPSpreadsheet: масштаб должен быть больше или равен 1 - PullRequest
0 голосов
/ 11 февраля 2019

Когда я пытаюсь открыть / прочитать электронную таблицу (xls), я получаю следующую ошибку:

Масштаб должен быть больше или равен 1

IЯ использую следующий код для открытия и чтения файла:

$filename = 'test.xls';
$spreadsheet = IOFactory::load($filename); //<-- ERRORS HERE
$worksheet = $spreadsheet->getActiveSheet();

Ошибка возникает в команде ::load.

Это не проблема с данными - я могу скопировать существующийданные в новый файл, и он работает правильно, поэтому должна быть проблема с самим файлом.

Я использую v1.6.0 PHPSpreadsheet, который является последним на момент написания.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Этот вопрос относится к таблице PHPS, а не к PHPExcel, как указано здесь: Ошибка PHPExcel: масштаб должен быть больше или равен 1

Хотя XLSX-версия моего файла похожа, она работает, как и ожидалось, поэтому необходимо создать отдельный вопрос.PHPExcel теперь также помечен как официально мертвый, поэтому кажется логичным добавить этот вопрос в правильную библиотеку / тег на SO.

С тех пор я нашел решение проблемы (добавлено ниже), что может также работает в PHPExcel, но не дает никаких гарантий!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

ОК, я нашел решение для своей конкретной проблемы ...

Требуется редактирование функции 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;
}
0 голосов
/ 11 февраля 2019

вы можете использовать:

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