Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблемы с обработанным файлом #15

Open
Stardisk opened this issue Dec 13, 2019 · 3 comments
Open

Проблемы с обработанным файлом #15

Stardisk opened this issue Dec 13, 2019 · 3 comments

Comments

@Stardisk
Copy link

Здравствуйте.
Во-первых, файл увеличивается более чем в 2 раза после обработки библиотекой (5 кбайт шаблон, 12 кбайт обработанный, хотя в него вставляется всего пара слов).

Во-вторых, при открытии обработанного файла выскакивает следующая ошибка:
"Предупреждение при загрузке документа test2.xlsx:
Данные не могут быть загружены полностью, т.к. превышено максимальное количество столбцов в листе."
Но при этом файл все равно открывается, переменные заменяются, и никаких излишних столбцов нет.
Для открытия использую LibreOffice Calc

@alhimik1986
Copy link
Owner

Пришли файл, в котором происходит эта проблема. При необходимости "секретные данные" можешь удалить из него. Попробую разобраться.

Во-первых, файл увеличивается более чем в 2 раза после обработки библиотекой (5 кбайт шаблон, 12 кбайт обработанный, хотя в него вставляется всего пара слов).

Файл может иметь иной размер, потому что он создаётся из Writer-объекта, а не копируется из оригинального файла.

@Stardisk
Copy link
Author

Я искал библиотеку, которая по аналогии с PhpWord может заменять переменные в документе на текст. И наткнулся на твою библиотеку.
Создал простейший файл для проверки твоей библиотеки.
test.xlsx - файл с переменными.
test2.xlsx - выходной файл от твоей библиотеки.
Код я взял из README с небольшими изменениями:
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator; PhpExcelTemplator::saveToFile('./test.xlsx', './test2.xlsx', [ '${test1}' => date('d-m-Y'), '${test2}' => 'English', '${test3}' => 'Русский', '${test4}' => 'Тестирование длинных строк', ]);
test.xlsx
test2.xlsx
И собственно при открытии test2.xlsx в LibreOffice выскакивает ошибка про столбцы.

@Vite4eg
Copy link

Vite4eg commented May 13, 2022

Это не проблема данной библиотеки, так работает PhpSpreadsheet.
Такое происходит например в случае, когда хотят в исходном файле сделать какое-нибудь действие на все колонки. Например, выравнивание во всех ячейках. В таком случае выделяют все ячейки, указывают настройки.
В результате этого в структуре xlsx сохраняется, что есть максимальная ячейка, для которой надо применить настройки.
Это можно увидеть если распаковать файл .xlsx, внутри есть файл xl/worksheets/sheet1.xml.
В файле появится примерно такой узел:

<cols>
    <col collapsed="false" customWidth="false" hidden="false" max="1024" min="1" outlineLevel="0" style="1" width="11.56"/>
</cols>

PhpSpreadSheet при чтении документа учитывает атрибут max, генерит большой документ при сохранении

Варианты решения:

  1. Не применять операции на все колонки документа
  2. Удалить на всякий случай все колонки после последней используемой колонки перед сохранением документа

Удаление колонок:

  1. Выделить колонку, после которой можно всё удалять (сама колонка тоже удалится)
  2. Нажать Ctrl+Shift + 🠖 - так мы выделим все колонки до конца документа
  3. Правой кнопкой - Удалить

Такие действия помогали убрать неиспользуемые столбцы из упоминаний в структуре xlsx, PhpSpreadsheet начинал создавать адекватные файлы

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants