2015-12-22 75 views
0

我们在我们的生产环境中使用PHPExcel已有4年多了,直到上周Excel 2010 & 2103无法打开PHPExcel生成的许多xls文件之一。我们得到的错误是Excel 2010无法打开由PHPExcel创建的特定尺寸的xls文件

错误:“Excel在文件中发现不可读的内容。是否要恢复此工作簿的内容?如果您信任此工作簿的源,请单击”是“。 。

我们尝试修复并浏览其他我们发现的建议,但都没有成功。

生成许多文件后,我们至少能够一致地重现此问题。虽然它看起来很奇怪,但在Windows 7 &上运行的Excel 2010 & 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>"; 

回答

1

试图改变这一点:

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

要这样:

$objWriter = new PHPExcel_Writer_Excel2007 ($objPHPExcel); 

和改扩建的.xls的.xlsx