Php 文件格式和扩展名不匹配
我正在使用库将一些数据导出到excel文档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); } $
$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
文件。