PHPExcel转换工具异常:CSV转Xlsx报错且生成文件含中文字体问题
解决PHPExcel转换CSV到Xlsx的报错与中文字体问题
嘿,我来帮你搞定这两个头疼的问题——"Error PHP EXECL"报错和中文字体显示异常!先从你的代码和常见坑入手分析:
一、排查"Error PHP EXECL"报错
你的代码里有几个容易踩的坑,先逐一排查:
- 路径错误:你写的
include 'PHPExcel/PHPExcel/IOFactory.php';大概率有问题,IOFactory.php通常在PHPExcel的根目录下,不是嵌套的PHPExcel/PHPExcel文件夹里,改成include 'PHPExcel/IOFactory.php';试试(前提是PHPExcel解压后直接放在项目根目录) - 依赖缺失:确认PHPExcel的完整库都上传到服务器了,别漏了核心文件比如
PHPExcel.php、Reader/CSV.php这些 - 权限不足:确保脚本能读取你的CSV源文件,同时有写入Xlsx输出文件的权限
- 代码截断:你的代码里
setIn...没写完,应该是设置CSV的输入编码,比如$objReader->setInputEncoding('GBK');,编码设置不对会导致读取CSV失败触发报错
二、解决中文字体显示问题
PHPExcel默认不会自动设置中文字体,所以导出的Xlsx里中文容易乱码或显示异常,解决方法很简单:在创建Excel对象后,全局设置支持中文的字体,比如微软雅黑、宋体。
修正后的完整示例代码
我把你的代码补全并修复了问题,直接用这个试试:
<?php // 修正路径:确保IOFactory.php的位置正确 include 'PHPExcel/IOFactory.php'; try { // 初始化CSV读取器 $objReader = PHPExcel_IOFactory::createReader('CSV'); // 设置分隔符(如果你的CSV用制表符分隔就保留,逗号分隔就删掉这行) $objReader->setDelimiter("\t"); // 根据你的CSV实际编码设置,比如GBK/UTF-8 $objReader->setInputEncoding('GBK'); // 读取CSV文件(替换成你的CSV文件路径) $objPHPExcel = $objReader->load('your_input.csv'); // 设置全局中文字体,解决显示问题 $defaultStyle = $objPHPExcel->getDefaultStyle(); $defaultStyle->getFont()->setName('微软雅黑'); $defaultStyle->getFont()->setSize(12); // 初始化Xlsx写入器 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); // 关闭预计算公式,提升导出速度并避免编码问题 $objWriter->setPreCalculateFormulas(false); // 导出Xlsx文件(替换成你的输出路径) $objWriter->save('your_output.xlsx'); echo "CSV转Xlsx成功!"; } catch (Exception $e) { // 捕获异常并输出详细错误(生产环境建议改成日志记录) echo "错误信息:" . $e->getMessage(); } ?>
额外注意事项
- 编码一致性:CSV文件的编码必须和
setInputEncoding设置的一致,比如你的CSV是UTF-8编码,就把参数改成'UTF-8' - 版本兼容性:PHPExcel仅支持PHP 5.3至7.1版本,如果你的PHP版本高于7.1,建议迁移到PhpSpreadsheet(它是PHPExcel的官方替代项目,维护更活跃)
- 文件路径:确认输入的CSV文件存在且可读,输出Xlsx的目录有写入权限
内容的提问来源于stack exchange,提问作者CSM
相关产品推荐
相关产品推荐

