PHP - PEAR Spreadsheet_Excel_Writer - 在行 ~259 之后合并列失败?

问题描述 投票:0回答:2

我正在使用 PEAR 的 Spreadsheet_Excel_Writer 来编写 Excel 文件。不过,我遇到了一个相当奇怪的错误。毫无疑问,我的脚本会停止合并第 260 行周围的单元格,加/减可能为 2。

我正在从具有可变起始位置的数据库中读取值。尽管对于每个数据库条目列表来说,合并停止工作的行并不相同,但当脚本从相同的起始位置运行时,它不会发生变化。

我知道我根本没有任何意义,所以附件是一个生成的Excel文件的示例。 ;) 请注意,从第 261 行开始,单元格不再像前面几行那样合并。

我完全不知道是什么原因造成的。我的脚本非常大并且也依赖于数据库,因此不太适合在这里提供,但我希望这里的人可能以前经历过这种情况。我是否遇到了一些我不知道的 Excel 限制?

谢谢!

php excel pear spreadsheet-excel-writer
2个回答
0
投票

不幸的是,这对于 Spreadsheet_Excel_Writer 来说似乎有些奇怪。我建议任何阅读的人都切换到 PHPExcel,因为使用该库生成时不会出现错误。


0
投票

找到2个解决方案:

  1. 只需使用具有相同参数的

    Worksheet::mergeCells()
    即可。 (但在使用合并之前填充单元格)

  2. _storeMergedCells()
    中的
    Worksheet.inc
    函数替换为:

    function _storeMergedCells()
    {
        // if there are no merged cell ranges set, return
        if (count($this->_merged_ranges) == 0) {
            return;
        }
        if(count($this->_merged_ranges) > 255) {
            $_merged_ranges_chunks = array_chunk($this->_merged_ranges, 255);
            foreach ($_merged_ranges_chunks as $chunk) {
                $this->_merged_ranges = $chunk;
                $this->_storeMergedCells();
            }
        } else {
            $record   = 0x00E5;
            $length   = 2 + count($this->_merged_ranges) * 8;

            $header   = pack('vv', $record, $length);
            $data     = pack('v',  count($this->_merged_ranges));
            foreach ($this->_merged_ranges as $range) {
                $data .= pack('vvvv', $range[0], $range[2], $range[1], $range[3]);
            }
            $this->_append($header . $data);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.