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

Yii框架XlsExporter自定义Excel字段名及首行着色咨询

解决Yii中XlsExporter自定义表头与首行着色问题

我来帮你搞定这两个需求,分两步走,代码修改都很清晰:

1. 自定义Excel表头名称

首先你需要把原来的索引数组$fields改成关联数组,键对应数据库字段名,值对应Excel里要显示的表头文本。然后调整XlsExporter的代码来支持这种映射:

修改Controller代码

public function actioncreateExcel() {
    $criteria= new CDbCriteria();
    // 关联数组:键=数据库字段,值=Excel表头名称
    $fields = [
        'id_u' => 'Id',
        'id_name' => 'name',
        'id_date' => 'date'
    ];
    $models = TblUsers::model()->findAll($criteria);
    XlsExporter::downloadXls('report', $models, false, true, $fields);
}

修改XlsExporter的字段处理逻辑

打开XlsExporter.php,找到downloadXls方法,把原来直接遍历$fields的逻辑改成区分字段键和表头标签:

// 替换原来的字段处理部分
$fieldKeys = [];
$fieldLabels = [];
if ($fields) {
    foreach ($fields as $key => $label) {
        if (is_string($key)) {
            $fieldKeys[] = $key; // 数据库字段名
            $fieldLabels[] = $label; // Excel表头文本
        } else {
            // 兼容原来的索引数组写法
            $fieldKeys[] = $label;
            $fieldLabels[] = $label;
        }
    }
} else {
    // 没传fields时,默认取模型属性
    $model = reset($models);
    $fieldKeys = array_keys($model->attributes);
    $fieldLabels = $fieldKeys;
}

// 生成表头时用$fieldLabels
foreach ($fieldLabels as $label) {
    $objPHPExcel->getActiveSheet()->setCellValue($column.$row, $label);
    $column++;
}

// 填充数据时用$fieldKeys
foreach ($models as $model) {
    $column = 'A';
    foreach ($fieldKeys as $field) {
        $objPHPExcel->getActiveSheet()->setCellValue($column.$row, $model->$field);
        $column++;
    }
    $row++;
}

2. 给首行标题添加背景色

在XlsExporter.php的downloadXls方法里,生成表头后添加样式设置,给首行加背景色(还可以顺便加粗文字、居中对齐):

// 生成表头之后,添加这段代码创建并应用样式
$headerStyle = $objPHPExcel->createStyle();
$headerStyle->applyFromArray([
    'fill' => [
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'color' => ['rgb' => 'E6E6E6'] // 浅灰色,可替换成你想要的十六进制颜色码
    ],
    'font' => [
        'bold' => true // 可选:让标题文字加粗
    ],
    'alignment' => [
        'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER // 可选:文字居中
    ]
]);
// 动态获取最后一列,批量应用样式到首行
$lastColumn = chr(65 + count($fieldLabels) - 1);
$objPHPExcel->getActiveSheet()->getStyle('A1:'.$lastColumn.'1')->applyFromArray($headerStyle->getArray());

这样修改后,导出的Excel不仅会显示你自定义的表头名称,首行标题还会带有背景色,看起来更清晰。

内容的提问来源于stack exchange,提问作者javaF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:46:59