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
相关产品推荐
相关产品推荐

