私はこの問題を約 1000 通りの方法で解決しようとしました。他の誰かが問題を見つけることができれば感謝します。
複数の Excel シートを生成してディスクに保存する PHPExcel を使用するコードがあります。
MS Excel 2010 を使用して 2 番目のファイル以降のすべてを開くと、"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 ライター メソッドを使用してみましたが、すべて同じ問題が発生します。
実際のコードは余分な処理を大量に実行しますが、コメントアウトすることで責任がないことを確認しました。上記のコードは、問題が発生する唯一の場所のようです。
どんな提案もありがたく受け取った。
====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>