我尝试了大约 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 编写器方法,但它们都会产生相同的问题。
真正的代码做了一大堆额外的东西,但我已经通过注释它来检查它是否不负责任。上面的代码似乎是唯一可能引入问题的地方。
任何建议都非常感激。
====已编辑==== 这是 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>