Php 文件格式和扩展名不匹配

Php 文件格式和扩展名不匹配,php,excel,Php,Excel,我正在使用库将一些数据导出到excel文档 $mailing_list = $event->getMailingList(); //returns an array $exporter = new ExportDataExcel('browser', 'mailing_list.xls'); $exporter->initialize(); foreach($mailing_list as $mail){ $exporter->addRow($mail); } $

我正在使用库将一些数据导出到excel文档

$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
文件,但当我打开它时,Excel 2010会抛出一条警告消息,说
xls的文件格式和扩展名不匹配

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

我用来初始化、添加行和完成文档的代码

$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();
当查看有关此错误的Microsoft文档时,归结为
.xls
文件被重命名为
.xlsx
文件,反之亦然。我尝试使用
mailing\u list.xlsx
而不是
mailing\u list.xls
,但是Excel无法打开该文件


我没有对库做任何更改,因此问题可能出在那里?

*.xlsx
默认情况下只能使用Excel 2007或更高版本打开文件。如果您的Excel版本早于此版本,则可以下载并安装


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

出现此警告是因为文件扩展名*.xls与XML内容不同

如前所述,该库将“将CSV、TSV或Excel XML(也称为SpreadsheeML)格式的数据导出到文件或直接导出到浏览器”

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


因此,您要么接受该警告,要么将文件命名为*.xml,要么使用一个真正可以导出XLS和/或XLSX的库。例如。

excel中的“另存为”是否表明它实际上是什么文件扩展名?@Ericit将其另存为
.xml
文件。另外,“另存为”下拉列表中的选项表示“XML工作表2003”,这正是它的含义。如“将CSV、TSV或Excel XML(又名SpreadsheeML)格式的数据导出到文件或直接导出到浏览器”中所述。所以,要么你活在这个警告中,要么你使用一个真正可以导出XLS和/或XLSX的库。例如。@AxelRichter你能在回答中写出来吗?我有office 2010,不应该在任何版本的Excel上打开
.xls
文件(这是)但如前所述,当我使用
.xlsx
而不是
.xls
时,它根本不会打开,就我所知,Office 2010支持
.xlsx
@LiamdeHaas,但即使在Office 2010中也不支持,请参见我的编辑。看起来并没有什么好办法来回避这个问题。我只是注意到,这很不幸。您是否有其他库的建议?我过去在生成Excel文件时使用了(在注释中提到的作为您正在使用的库的基础)。我相信库可以正确地导出为
*.xls
文件。