如何在CodeIgniter中将MySQL数据并排(按行)插入Excel?
嘿,我来帮你搞定这个Excel数据行排列的问题!看起来你现在的代码可能没处理好行和列的索引逻辑,导致数据都垂直堆在一起了。咱们调整一下索引的处理方式,就能让数据按行并排呈现啦。
核心思路
要实现横向排数据,关键是:
- 表头固定在第1行,每个表头字段对应不同的列
- 每条MySQL数据对应Excel的一行,数据的每个字段填充到同一行的不同列中
修正后的完整代码示例
$this->load->library("excel"); $object = new PHPExcel(); $activeSheet = $object->setActiveSheetIndex(0); // 先获取活动工作表,简化后续调用 // 1. 设置表头(横向排列在第1行) $table_columns = array("category", "Total YES Count", "Unit"); $colIndex = 0; foreach($table_columns as $fieldName) { // PHPExcel的行/列索引从1开始,表头放第1行,列从0递增 $activeSheet->setCellValueByColumnAndRow($colIndex, 1, $fieldName); $colIndex++; } // 2. 从MySQL获取数据(替换成你实际的查询语句) $dbResult = $this->db->select('category, total_yes_count, unit') ->get('your_table_name') ->result_array(); // 3. 填充数据行(从第2行开始,每行对应一条数据库记录) $rowIndex = 2; foreach($dbResult as $singleRow) { $colIndex = 0; // 遍历当前记录的每个字段,填充到同一行的不同列 foreach($table_columns as $fieldLabel) { // 这里要注意:数据库字段名和表头标签的对应关系 // 比如表头是"Total YES Count",数据库字段可能是"total_yes_count",所以转成小写下划线匹配 $dbFieldName = strtolower(str_replace(' ', '_', $fieldLabel)); $cellValue = isset($singleRow[$dbFieldName]) ? $singleRow[$dbFieldName] : ''; $activeSheet->setCellValueByColumnAndRow($colIndex, $rowIndex, $cellValue); $colIndex++; } $rowIndex++; // 处理完一条记录,行号+1,准备下一行 } // 4. 导出Excel到浏览器(可选,根据你的需求调整) $writer = PHPExcel_IOFactory::createWriter($object, 'Excel5'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="data_report.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output');
关键注意点
- 索引逻辑:PHPExcel的行和列都是从1开始计数的,所以表头放在第1行,数据从第2行开始;列索引从0开始递增,保证同一行的字段横向排列。
- 字段对应:要确保数据库返回的字段名和表头标签能正确匹配,我上面用了把表头转成小写下划线的方式(比如"Total YES Count"转成"total_yes_count"),如果你的数据库字段名不一样,直接修改
$dbFieldName的取值逻辑就行。 - 性能优化:如果数据量很大,建议分批处理或者考虑用更轻量的Excel处理库(比如PhpSpreadsheet,是PHPExcel的继任者),避免内存溢出。
内容的提问来源于stack exchange,提问作者Aravind
相关产品推荐
相关产品推荐

