PHP_XLSXWriter проблема заголовка мути-строк - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать с помощью PHP_XLSXWriter файл Excel, содержащий 2 строки заголовка (текст) и числовые значения в следующих строках.Мне удается создать из php файл, имеющий 1 строку заголовка с ожидаемыми типами и стилями для строки заголовка и следующих строк данных.Это может быть открыто в Excel правильно.Когда я вставляю из php вторую строку заголовка (текст) методом writeSheetRow, Excel отображает предупреждение / сообщение об ошибке и предлагает восстановить файл.Когда я принимаю файл для восстановления, содержимое файла в порядке (заголовок (2 строки) и числовые данные).После сохранения файла больше не появляется предупреждающее сообщение при открытии файла.Кто-нибудь знает, как действовать, чтобы избежать предупреждения об инициализации?Спасибо.

Подробнее: проблема связана с тем, что при написании заголовка определяются типы столбцов (строка 1, с методом writeSheetHeader).Это определяет типы столбцов всех следующих строк (от строки 2 до ..).В моем случае строка 2 не является строкой данных.Он содержит только строки, которые являются второй строкой заголовка.Это вызывает проблему, поскольку существует конфликт между типом, определенным в заголовке (числовой), и фактическими значениями в строке (sring).

1 Ответ

0 голосов
/ 14 ноября 2018

Я нашел решение, создав модифицированную версию метода writeSheetRow, который я назвал: writeSheetRowHeader.В этом новом методе я устанавливаю тип значений, вставленных с помощью этого метода, в «ОБЩИЙ».

Insted of:

public function writeSheetRow($sheet_name, array $row, $row_options=null)
{
    ....
        $c=0;
        foreach ($row as $v) {
            $number_format = $sheet->columns[$c]['number_format']; //BEFORE
            $number_format_type = $sheet->columns[$c]['number_format_type']; //BEFORE
            $cell_style_idx = empty($style) ? $sheet->columns[$c]['default_cell_style'] : $this->addCellStyle( $number_format, json_encode(isset($style[0]) ? $style[$c] : $style) );
            $this->writeCell($sheet->file_writer, $sheet->row_count, $c, $v, $number_format_type, $cell_style_idx);
            $c++;
        }
.....
}

Я использую

public function writeSheetRowHeader($sheet_name, array $row, $row_options=null)
{
    ....
        $c=0;
        foreach ($row as $v) {
            $number_format = 'GENERAL'; // AFTER
            $number_format_type = 'n_auto'; // AFTER
            $cell_style_idx = empty($style) ? $sheet->columns[$c]['default_cell_style'] : $this->addCellStyle( $number_format, json_encode(isset($style[0]) ? $style[$c] : $style) );
            $this->writeCell($sheet->file_writer, $sheet->row_count, $c, $v, $number_format_type, $cell_style_idx);
            $c++;
        }
.....
}
...