Excel 2010无法打开PHPExcel创建的特定大小的xls文件



我们已经在生产环境中使用PHPExcel超过4年了,它一直运行良好,没有任何问题,直到上周Excel 2010&2103无法打开PHPExcel生成的许多xls文件中的一个。我们得到的错误是

错误:"Excel在文件中发现无法读取的内容。是否恢复此工作簿的内容?如果您信任此工作簿的来源,请单击"是"。".

我们试图修复并逐步采纳我们发现的其他建议,但都没有奏效。

在生成了许多文件之后,我们至少能够始终如一地重现这个问题。虽然看起来很奇怪,但Excel2010&2013在windows7&10无法打开phpExcel生成的文件大小在6914K-6977K之间的任何文件。

我们找不到Excel 2010/2013不打开这些文件的任何解决方案或原因。我们是不是错过了什么?提前感谢您的任何建议。

我们正在使用。。。

PHPExcel:1.8网络服务器:Apache/2.2.15(Unix)&PHP 5.3.3在Red Hat 上运行

重现问题的示例代码。

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>";

尝试更改此项:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

对此:

$objWriter = new PHPExcel_Writer_Excel2007 ( $objPHPExcel );

并将扩展名更改为.xlsx

最新更新