Yii2:phpoffice/phpexcel 将 .xlsx 文件识别为 HTML

Yii2: phpoffice/phpexcel identifies .xlsx file as HTML

我正在尝试为我的 yii2 项目使用 phpoffice/phpexcel 插件来读取 excel 文件。对于带有 xls 扩展名的文件,该插件可以完美运行,我能够读取内容,但是当我尝试使用带有日文文件名和 xlsx 扩展名的文件时,它会给我这样的错误:

DOMDocument::loadHTML(): Invalid char in CDATA 0x3 in Entity, line: 1.

我试着调查 PHPExcel_IOFactory::identify。调查该功能,我在 IOFactory class 中遇到了 createReaderForFile 并且在检查此处设置的扩展类型时,它显示 'Excel2007' 但由于某种原因,在过程的最后,文件仍然被识别作为 HTML.

为了进一步描述这个问题,我的文件有不同的扩展名和名称,但内容基本相同,如下所示:

col1               col2           col3
aaaa               bbbb           cccc

文件如下:

  1. あああ.xls(可读)
  2. あああ.xlsx(无法读取)
  3. aaaa.xls(可读)
  4. aaaa.xlsx(可读)

只有あああ.xlsx读不出来,其他都没问题。这是对 phpoffice/phpexcel 插件的某种限制吗?如果是,您能否推荐其他 yii2 扩展,使我能够正确读取 xlsx 和 xls 文件?或者有什么方法可以解决这个问题,以便它可以正确识别文件?

请记住这些扩展的文件之间存在差异,这在 this SO answer 中有最好的解释。

您必须使用正确的 Writer/Reader:Excel2007 代表 xlsxExcel5 代表 xls

我现在已经设法解决了这个问题。问题似乎与 zip 文件的文件编码有关,在 PHPExcel_IOFactory::identify 修复它之前添加 \PHPExcel_Settings::setZipClass(\PHPExcel_Settings::PCLZIP);