2

我使用Harish Chauhan 的 Excel Writer生成一个 excel (xls) 文件。

然后我使用phpExcelReader 2读取由 Excel Writer 类创建的文件,但一直出现此错误:

The filename myXls.xls is not readable

我可以用 MS Excel 打开“myXls.xls”文件。但是如果我用另一个名字保存文件,它可以成功读取。

尝试探索代码,似乎错误是由:

if (substr($this->data, 0, 8) != IDENTIFIER_OLE) {
    //echo 'Error';
    $this->error = 1;
    return false;
}

IDENTIFIER_OLE 被定义:

define('IDENTIFIER_OLE', pack("CCCCCCCC",0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1));

我不知道如何解决它。请帮忙。

谢谢你的时间!

4

2 回答 2

1

Harish Chauhan 的 ExcelWriter 类生成的文件不是真正的 OLE BIFF .xls 文件,而是 HTML 标记和 SpreadSheetML 中的一些元素的混合体,SpreadSheetML 是 Microsoft 定义的 XML 格式,可替代 Excel 2003 中的 BIFF。事实证明它从未特别流行; 但是更高版本的 MS Excel 本身仍然可以读写这种格式。MS Excel 对阅读 HTML 标记也非常宽容,尽管最新版本会在文件格式与其扩展名不匹配时通知您。

phpExcelReader 2 是为读取 Excel BIFF 文件而编写的,因此它无法读取由 Harish Chauhan 的类生成的非 OLE/非 BIFF 文件。

如果您想以正确的格式写入和读取文件,那么我建议您使用PHPExcel ,或者使用真正的 Excel 文件的许多其他PHP 库之一。

于 2012-05-09T19:17:07.837 回答
0

我有同样的问题。任务是解析非常旧的 XLS 文件 (Excel2)。我在 PHP 中找不到任何适用于这种旧格式的库。

所以解决方案是使用 LibreOffice命令行转换为 XLSX(也适用于 CSV),然后使用任何“现代”Excel 解析器对其进行解析。

我们在服务器中安装了 LibreOffice,这是要转换的命令:

libreoffice --headless --convert-to xlsx original_source.xls

或者

libreoffice --headless --convert-to csv original_source.xls
于 2016-07-15T14:42:05.980 回答