CodeIgniter中PHPExcel转HTML为Excel失败:仅显示文件名
解决CodeIgniter中PHPExcel转换HTML为Excel只显示文件名的问题
看起来你遇到的核心问题是生成的Excel文件没有显示HTML表格内容,反而只显示了HTML文件名。我帮你分析几个可能的原因并给出修正方案:
1. 先排查HTML内容是否正确
你第一步要确认生成的临时HTML文件里确实包含完整的表格内容,而不是空的或者格式错误的代码。可以在生成HTML后临时输出内容检查:
$html = $this->load->view('viewfilename', $this->data, TRUE); // 临时输出HTML内容验证 echo $html; exit;
如果输出的HTML是空的或者没有<table>标签,那问题出在视图渲染环节,而不是PHPExcel的转换。
2. 修正数据传递的错误
你的代码里有个明显的变量问题:你把报表数据存在了$this->data数组里,但渲染视图时传递的是未定义的$data变量,这会导致视图无法获取数据,生成的HTML自然是空的。
修正这一行:
// 错误写法 $html = $this->load->view('viewfilename', $data, TRUE); // 正确写法 $html = $this->load->view('viewfilename', $this->data, TRUE);
3. 确保HTML结构符合PHPExcel要求
PHPExcel的HTML读取器对HTML格式要求比较严格,必须包含标准的<table>标签,且尽量避免复杂的嵌套或非标准HTML。你的视图文件viewfilename.php应该以表格为核心输出,比如:
<table border="1"> <thead> <tr> <th>报表标题1</th> <th>报表标题2</th> </tr> </thead> <tbody> <?php foreach($report1 as $item): ?> <tr> <td><?php echo $item->column1; ?></td> <td><?php echo $item->column2; ?></td> </tr> <?php endforeach; ?> <!-- 报表详情内容同理 --> </tbody> </table>
4. 修正PHPExcel代码中的错误
方法1的修正版
$this->data['report1'] = $this->report_m->get_report(); $this->data['report_details'] = $this->report_m->get_report_details(); // 正确加载PHPExcel库 $this->load->library('PHPExcel'); $this->load->library('PHPExcel/IOFactory'); // 渲染视图生成HTML $html = $this->load->view('viewfilename', $this->data, TRUE); // 使用FCPATH确保文件路径正确(避免权限或路径找不到问题) $tmpfile = FCPATH . time() . '.html'; file_put_contents($tmpfile, $html); // 读取HTML并生成Excel $reader = PHPExcel_IOFactory::createReader('HTML'); $objPHPExcel = $reader->load($tmpfile); // 保存为Excel2007格式(对应.xlsx后缀) $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save(FCPATH . 'excelfile.xlsx'); // 删除临时文件 unlink($tmpfile);
方法2的修正版(注意方法名错误)
你之前用了loadIntoExisting,但PHPExcel的正确方法名是loadIntoExistingWorksheet,同时注意格式与后缀匹配:
$this->data['report1'] = $this->report_m->get_report(); $this->data['report_details'] = $this->report_m->get_report_details(); $this->load->library('PHPExcel'); $this->load->library('PHPExcel/IOFactory'); $html = $this->load->view('viewfilename', $this->data, TRUE); $tmpfile = FCPATH . time() . '.html'; file_put_contents($tmpfile, $html); $objPHPExcel = new PHPExcel(); $excelHTMLReader = PHPExcel_IOFactory::createReader('HTML'); // 修正方法名 $excelHTMLReader->loadIntoExistingWorksheet($tmpfile, $objPHPExcel); $objPHPExcel->getActiveSheet()->setTitle('report'); // Excel2007对应.xlsx后缀,若要生成.xls用'Excel5'格式 $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $writer->save(FCPATH . 'nameoffiledrrr.xlsx'); unlink($tmpfile);
额外注意事项
- 文件权限:确保CodeIgniter的根目录(FCPATH)有读写权限,否则无法创建临时文件和输出Excel。
- PHPExcel版本:如果你用的是较新版本的PHPExcel(或其替代方案PhpSpreadsheet),API可能略有不同,但核心逻辑一致。
内容的提问来源于stack exchange,提问作者abdul kadhar
相关产品推荐
相关产品推荐

