我正在使用 PEAR 的 Spreadsheet_Excel_Writer 来编写 Excel 文件。不过,我遇到了一个相当奇怪的错误。毫无疑问,我的脚本会停止合并第 260 行周围的单元格,加/减可能为 2。
我正在从具有可变起始位置的数据库中读取值。尽管对于每个数据库条目列表来说,合并停止工作的行并不相同,但当脚本从相同的起始位置运行时,它不会发生变化。
我知道我根本没有任何意义,所以附件是一个生成的Excel文件的示例。 ;) 请注意,从第 261 行开始,单元格不再像前面几行那样合并。
我完全不知道是什么原因造成的。我的脚本非常大并且也依赖于数据库,因此不太适合在这里提供,但我希望这里的人可能以前经历过这种情况。我是否遇到了一些我不知道的 Excel 限制?
谢谢!
不幸的是,这对于 Spreadsheet_Excel_Writer 来说似乎有些奇怪。我建议任何阅读的人都切换到 PHPExcel,因为使用该库生成时不会出现错误。
找到2个解决方案:
只需使用具有相同参数的
Worksheet::mergeCells()
即可。 (但在使用合并之前填充单元格)
将
_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);
}
}