Проблемы со смешанным форматом PHP_XLSXWriter - PullRequest
0 голосов
/ 05 августа 2020

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

Мне нужно создать файл Excel из таблиц моей базы данных вместе со строкой заголовка, содержащей весь текст. Данные после строки заголовка имеют формат «целое число», «число», «текст». У меня уже есть отлично работающий скрипт, который извлекает информацию из базы данных, а затем записывает ее в файл XLSX перед отправкой файла в браузер пользователя. Вверху этого файла находится следующее:

$header = array("string","string","string");
$writer->writeSheetHeader($sheet_name, $header, $col_options = ['widths'=>[20,20,50], 'suppress_row'=>true] );

Все это работает безупречно, и мой файл открывается в Excel. Однако все мои данные находятся в текстовом формате Excel; строка заголовка и строки данных. Это, очевидно, потому что я объявляю, что три столбца должны быть отформатированы как «строка», но если я изменю эту строку на:

$header = array("integer","#0.00","string");
$writer->writeSheetHeader($sheet_name, $header, $col_options = ['widths'=>[20,20,50], 'suppress_row'=>true] );

Тогда последний Excel предупреждает пользователя о проблеме в файле, поскольку он открывается и предлагает восстановить файл. Это работает, и заголовок представляет собой весь текст, а данные имеют правильный формат, но с точки зрения пользователя это беспорядочно и непрофессионально. Я пытаюсь принудительно отформатировать все столбцы, но как это обойти? Я долго искал файлы справки и онлайн-форумы, но не могу найти ничего, что четко объясняло бы мне, как смешивать мои форматы в PHP_XLSXWriter.

Удалось ли кому-нибудь еще решить эту проблему, и если да , как?

1 Ответ

0 голосов
/ 07 августа 2020

Теперь эта проблема решена, поэтому я решил обновить ветку, чтобы помочь всем, кто столкнется с этой проблемой.

Подводя итог, проблема в том, что во многих ванильных версиях PHP_XLSXWriter (включая ту, Я использовал), вы можете установить только главные заголовки для форматов типа данных столбца (десятичный, целочисленный, строковый и т. Д. c.). Это работает, но вы не сможете установить дополнительные команды формата данных позже.

После дальнейшего поиска я обнаружил на этой странице новую функцию: https://github.com/mk-j/PHP_XLSXWriter/pull/126/files. В случае, если эта ссылка не работает или по другой причине не может быть посещена, вот новая функция из нее:

public function updateFormat($sheet_name, array $header_types) {
    if (empty($sheet_name) || empty($header_types))
        return;
    if(empty($this->sheets[$sheet_name])) {
        $this->writeSheetHeader($sheet_name, $header_types, array('suppress_row'=>true));
        return;
    }
    $sheet = &$this->sheets[$sheet_name];
    $sheet->columns = $this->initializeColumnTypes($header_types);
    $this->current_sheet = $sheet_name;
}

Эта функция добавляется к загруженному файлу xlsxwriter. php, в строке 210 (между функции 'initializeColumnTypes' и 'writeSheetHeader').

После добавления я мог бы вызвать следующий PHP код на моей странице:

$writer->updateFormat($sheet_name, array('integer','#.00','string'));

Это означает исходные форматы типов данных были установлены главным заголовком, как обычно, но я мог выборочно форматировать типы данных в любой строке, которую я хотел, с помощью новой функции.

Надеюсь, это поможет любым PHP разработчикам, которые окажутся в той же ситуации, что и я .

...