【问题标题】:PHP_XLSXWriter Mixed Format IssuesPHP_XLSXWriter 混合格式问题
【发布时间】:2020-08-05 09:31:46
【问题描述】:

我正在为我的一个项目使用 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 中混合格式的内容。

有其他人设法解决这个问题吗?如果有,如何解决?

【问题讨论】:

    标签: excel phpxlsxwriter


    【解决方案1】:

    这个问题现在已经解决了,所以我想我会更新线程来帮助遇到这个问题的其他人。

    总而言之,问题在于在 PHP_XLSXWriter 的许多普通版本(包括我使用的那个)中,您只能为列数据类型格式(十进制、整数、字符串等)设置主标题。这行得通,但是您以后不能再设置其他数据类型格式命令。

    经过进一步搜索,我在此页面上发现了一个新功能: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 开发人员。

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2020-12-27
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多