You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:13