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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:20:26