【问题标题】:Yii2: phpoffice/phpexcel identifies .xlsx file as HTMLYii2:phpoffice/phpexcel 将 .xlsx 文件识别为 HTML
【发布时间】:2017-04-09 09:41:12
【问题描述】:

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

DOMDocument::loadHTML():实体中 CDATA 0x3 中的字符无效,行:1。

我尝试调查 PHPExcel_IOFactory::identify。调查该函数时,我在 IOFactory 类中遇到了 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 文件?或者有什么方法可以解决这个问题,以便它可以正确识别文件?

【问题讨论】:

    标签: php excel yii2 phpexcel phpoffice


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您必须使用正确的写入器/读取器:Excel2007 用于 xlsxExcel5 用于 xls

      【讨论】:

      • 谢谢,但我不确定我是否遵循。我使用 MS Excel 2013 创建了该文件,所以我认为它应该没有问题?
      • あああ.xlsx 和 aaaa.xlsx 内容基本相同,都是在 MS Excel 2013 中创建的,所以我不知道为什么它只能读取其中一个。
      • 这不是关于 Excel 本身,而是关于 PHPExcel 库,请参见 xlsxxls 的示例行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2013-02-03
      • 2015-08-02
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多