文件格式和扩展名不匹配


File format and extension do not match

我正在使用php-export-data库将一些数据导出到excel文档。

我已经初始化,添加行,并最终确定文档为例,它产生一个可用的.xls文件如预期的,但当我打开它Excel 2010抛出一个警告消息说the file format and extension of xls don't match

文件仍然可用,可以很好地打开,但由于这是一个客户端,我更希望警告根本不显示。

我用来初始化、添加行和最终确定文档的代码。

$mailing_list = $event->getMailingList(); //returns an array
$exporter = new ExportDataExcel('browser', 'mailing_list.xls');
$exporter->initialize();
foreach($mailing_list as $mail){
    $exporter->addRow($mail);
}
$exporter->finalize();

当查看有关此错误的微软文档时,它归结为.xls文件被重命名为.xlsx文件,反之亦然。我试过使用mailing_list.xlsx而不是mailing_list.xls,但Excel无法打开文件。

我没有对库进行任何更改,所以问题可能在那里?

由于文件扩展名*.xls与XML内容不同而出现警告。

正如https://github.com/elidickinson/php-export-data中提到的,这个库将"以CSV, TSV或Excel XML(又名SpreadsheeML)格式导出数据到文件或直接到浏览器"。

因此其导出的实际内容类型将是XML,而不是XLS或XLSX。如果将文件命名为*.xml并用Excel打开该*.xml,则警告将消失。但是你不能确定这个文件是通过双击在Excel中打开的。如果有另一个应用程序设置为*.xml文件的默认应用程序,则不会。

所以你要么接受这个警告,要么将文件命名为*.xml,要么使用一个真正可以导出XLS和/或XLSX的库。例如:https://github.com/PHPOffice/PHPExcel

*.xlsx文件默认只能使用Excel 2007及以上版本打开。如果您的Excel版本比此版本早,则可以下载并安装Microsoft Office兼容性包。

查看ExportDataExcel类上面的注释,该文件的格式称为SpreadsheetML。不幸的是,似乎这种类型的文件的正确扩展名可能是*.xml,默认情况下不会在Excel中打开。注释提到,您可以通过给文件一个*.xls扩展名来解决这个问题,但这将带来您得到的警告。