如何用PHP数组正确填充指定格式的Excel表格?
如何用PHP数组填充指定样式的Excel表格
先来说说你的问题核心:原代码里的合并单元格逻辑、列赋值顺序都和目标表格的结构不匹配,而且数组结构的对应关系没理清楚,导致填充失败。下面一步步帮你解决:
第一步:明确目标表格的核心结构
根据你描述的样式,表格应该是这样的布局:
- 第一列(A列):检查项序号,每个序号对应2行(需要合并单元格)
- 第二列(B列):检查项标题,每个标题对应2行(需要合并单元格)
- 第三列(C列):分两行展示,第一行是「Состояние(状态)」的结果,第二行是「Рекомендации(推荐)」的结果
第二步:用贴合表格的数组结构
不用修改你最初的数组,它的字段已经完全对应表格需求,保持原样即可:
$arr = [ [ 'checkTitle' => 'Проверка наличия файла robots.txt', 'result' => "true", 'stateTitle' => 'Состояние', 'recommendTitle' => "Рекомендации", 'stateResult' => "Файл есть", 'recommendResult' => "Нету" ] // 后续可以直接追加更多检查项 ];
第三步:修正Excel填充代码
下面是调整后的完整代码,我标注了关键修改点:
// 初始化起始行,假设从第2行开始(第1行是表格表头) $startLine = 2; // 遍历每个检查项 foreach ($arr as $key => $item) { $currentColumn = 0; // 1. 填充序号(A列)+ 合并当前检查项的2行 $this->sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $key + 1); $this->document->getActiveSheet()->mergeCells("A{$startLine}:A".($startLine + 1)); $this->sheet->getStyle("A{$startLine}:A".($startLine + 1))->applyFromArray($this->textAlignCenter()); // 2. 填充检查项标题(B列)+ 合并2行 $currentColumn++; $this->sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $item['checkTitle']); $this->document->getActiveSheet()->mergeCells("B{$startLine}:B".($startLine + 1)); $this->sheet->getStyle("B{$startLine}:B".($startLine + 1))->applyFromArray($this->textAlignCenter()); // 3. 填充状态结果(C列第1行) $currentColumn++; // 可选:如果需要显示状态标题,可改成 "{$item['stateTitle']}: {$item['stateResult']}" $this->sheet->setCellValueByColumnAndRow($currentColumn, $startLine, $item['stateResult']); // 4. 填充推荐结果(C列第2行) // 可选:如果需要显示推荐标题,可改成 "{$item['recommendTitle']}: {$item['recommendResult']}" $this->sheet->setCellValueByColumnAndRow($currentColumn, $startLine + 1, $item['recommendResult']); // 设置C列两行的对齐样式 $this->sheet->getStyle("C{$startLine}:C".($startLine + 1))->applyFromArray($this->textAlignCenter()); // 每个检查项占2行,所以下一个检查项从当前行+2开始 $startLine += 2; }
关键修改说明
- 原代码里
$startLine +=3是错误的,每个检查项只占2行,应该改为$startLine +=2 - 合并单元格的范围不能写死(比如原代码的
A2),要动态绑定当前的$startLine,否则所有检查项都会合并到同一行 - 原代码的循环赋值逻辑会把数组值依次塞进B、C、D列,不符合表格结构,现在改为逐个对应A、B、C列的需求填充
- 把状态和推荐结果分别放到C列的两行,而非合并,匹配目标样式的布局
这样调整后,就能正确把数组内容填充到你想要的Excel表格里了。
内容的提问来源于stack exchange,提问作者Bipa
相关产品推荐
相关产品推荐

