我们已经在我们的生产环境中使用PHPExcel已经超过4年了,直到上周Excel 2010和Excel一直使用PHPExcel时没有任何问题。 2103无法打开PHPExcel生成的许多xls文件之一。我们得到的错误是
错误:" Excel在文件中找到了不可读的内容。你想恢复这个工作簿的内容吗?如果您信任此工作簿的来源,请单击“是”。"
我们尝试修复并逐步完成我们发现的其他建议,但都没有效果。
生成许多文件后,我们至少能够始终如一地重现此问题。虽然看起来很奇怪但Excel 2010& 2013年在Windows 7和Windows上运行10无法打开由phpExcel生成的文件大小介于6914K - 6977K之间的任何文件。
我们无法找到Excel 2010/2013无法打开这些文件的任何解决方案或原因。我们错过了什么吗?提前感谢任何建议。
我们正在使用......
PHPExcel:1.8 Webserver:Apache / 2.2.15(Unix)&在Red Hat上运行的PHP 5.3.3
重现问题的示例代码。
require_once dirname(dirname(__FILE__)) . '/Classes/PHPExcel.php';
$timestamp = date("YmdHis");
$filename = "report_" . $timestamp . ".xls";
$rowcount = 20150;
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
$objPHPExcel = new PHPExcel();
$VAR1 = '99999';
$VAR2 = 'XXX';
$VAR3 = 'XXXX';
$VAR4 = 'XXXXX';
$VAR5 = 'XXX';
$VAR6 = 'XXXXXXXXXXXXXXXXXXXX';
$VAR7 = 'XXX';
$VAR8 = 'XXXXXXXXXXXXXXXXXXX';
$VAR9 = 'XXXXXXXXXXXXXXXXXXX';
$VAR10 = '999999999';
$VAR11 = 'xxxxxxxxxxx';
$VAR12 = 'XXXXXXX';
$VAR13 = 'XXXX';
$VAR14 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$VAR15 = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
$VAR16 = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX';
$VAR17 = 'XXX';
$VAR18 = '99999';
$VAR19 = '9999999999';
$VAR20 = '999999999';
$VAR21 = 'XXXXXXXXXXXXXXXXXX';
$VAR22 = '99999';
$VAR23 = '999999';
for ( $i=2 ; $i<intval($rowcount) ; $i++ )
{
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue("A$i", "$VAR1")
->setCellValue("B$i", "$VAR2")
->setCellValue("C$i", "$VAR3")
->setCellValue("D$i", "$VAR4")
->setCellValue("E$i", "$VAR5")
->setCellValue("F$i", "$VAR6")
->setCellValue("G$i", "$VAR7")
->setCellValue("H$i", "$VAR8")
->setCellValue("I$i", "$VAR9")
->setCellValue("J$i", "$VAR10")
->setCellValue("K$i", "$VAR11")
->setCellValue("L$i", "$VAR12")
->setCellValue("M$i", "$VAR13")
->setCellValue("N$i", "$VAR14")
->setCellValue("O$i", "$VAR15")
->setCellValue("P$i", "$VAR16")
->setCellValue("Q$i", "$VAR17")
->setCellValue("R$i", "$VAR18")
->setCellValue("S$i", "$VAR19")
->setCellValue("T$i", "$VAR20")
->setCellValue("U$i", "$VAR21")
->setCellValue("V$i", "$VAR22")
->setCellValue("W$i", "$VAR23");
}
$objPHPExcel->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("H")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("I")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("J")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("K")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("L")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("M")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("N")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("O")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("P")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("Q")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("R")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("S")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("T")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("U")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("V")->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("W")->setAutoSize(true);
ini_set("max_execution_time","900");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save("reports/$filename");
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
unset($objWriter);
echo "<a href=reports/$filename>Download this file</a><br><br>";
答案 0 :(得分:1)
尝试改变这一点:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
对此:
$objWriter = new PHPExcel_Writer_Excel2007 ( $objPHPExcel );
将扩展程序 .xls 更改为 .xlsx