PHPExcel创建“不可读的内容”

我已尝试解决大约1000种不同方式的问题.欣赏是否有人可以发现问题.

我使用PHPExcel生成了多个Excel工作表并将其保存到磁盘的代码.

使用MS Excel 2010从第二个文件开始打开所有内容时,出现错误“ Excel在FILENAME中发现了不可读的内容.您要恢复此工作簿的内容.”该文件已“恢复”,并且可以正常运行.在OPen Office中打开不会产生任何错误.

这是代码的简化版本.

<?php
$filenames = array("filenames go here");

$sheet1 = PHPExcel_IOFactory::load($template1);
$writer1 = new PHPExcel_Writer_Excel2007($sheet1);
$writer1->save('somefilename.xlsx');
//This file opens without problem
$sheet1->disconnectWorksheets();
unset($sheet1);
unset($writer1);

$i = 0;
foreach($filenames as $file){
    $template = "template2.xlsx";
    $fileName = 'filename' . $i . ' .xlsx';
    $spreadsheet = PHPExcel_IOFactory::load($template);
    $objWriter = new PHPExcel_Writer_Excel2007($spreadsheet);
    $objWriter->save($fileName);
    $spreadsheet->disconnectWorksheets();
    unset($spreadsheet);
    //This file throws error when opened in Excel 2007+
    $i++;
 }
?>

我检查了以下内容:

>没有明显的php错误消息,空格或多余的输入会破坏文件.
>模板文件可以在Excel 2010中正常打开.
>我尝试使用不同的PHPExcel writer方法,但是它们都会产生相同的问题.

真正的代码会完成很多额外的工作,但是我已经通过注释掉它来负责.上面的代码似乎是唯一可以引入问题的地方.

任何建议表示感谢.

==== ==== EDITED
这是Excel生成的错误日志:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
     <logFileName>error049120_01.xml</logFileName>
     <summary>Errors were detected in file 'C:\Users\USERNAME\AppData\Local\Temp\FILENAME.xlsx'</summary>
     -<additionalInfo>
           <info>Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.</info>
     </additionalInfo>
</recoveryLog>

解决方法:

此错误与php.ini中的配置mbstring.func_overload有关.
您可以使用解决方法来避免此错误-只需在脚本开始处添加:

if (function_exists('mb_internal_encoding')) {
    $oldEncoding=mb_internal_encoding();
    mb_internal_encoding('latin1');
}

最后:

if (function_exists('mb_internal_encoding'))
    mb_internal_encoding($oldEncoding);

它对我有所帮助,所以,我相信它也会对您有所帮助.

上一篇:PHPExcel生成Excel文件---提示Class 'PHPExcel_Style_Alignment' not found


下一篇:PHPExcel格式列到日期格式3月14日