匿名質問者

「PHPExcel.php」によってエクセルデータを解析しているのですが、

ファイルによって、以下のエラーが出て解析しなくなってしまいます。
Warning: DOMDocument::loadHTMLFile(): Invalid char in CDATA 0x3 in hogehoge.xlsx, line: 1 in /usr/home/xxxxx/www/htdocs/user/Classes/PHPExcel/Reader/HTML.php on line 428
Warning: DOMDocument::loadHTMLFile(): Invalid char in CDATA 0x4 in .hogehoge.xlsx, line: 1 in /usr/home/xxxxx/www/htdocs/user/Classes/PHPExcel/Reader/HTML.php on line 428
Warning: DOMDocument::loadHTMLFile(): Invalid char in CDATA 0x14 in .hogehoge.xlsx, line: 1 in /usr/home/xxxxx/www/htdocs/user/Classes/PHPExcel/Reader/HTML.php on line 428

回避策はないのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2015/12/30 10:51:29

ベストアンサー

匿名回答1号 No.1

xlsx形式のファイルはxmlをzipで固めたものです。
拡張子をzipに変えて開き、中の「_rels\.rels」に「Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"」という記述がありませんか?
もしzipで開けない、上記のファイルがない、記述がないとなるとPHPExcelはxlsxとして認識しません。ファイルが壊れていないか、暗号化されていないか確認してください。
もしファイルが開ける、記述もあるという場合、phpでzipがうまく開けないのかも知れません。
zipのライブラリやphpのバージョンが新しいか確認してみてはどうでしょう。

匿名質問者

ありがとうございました。

2015/12/30 10:52:02
匿名回答1号

遅くなりましたが……
zipにも色々微妙な癖というか違いがある様で、microsoftのzipとphp(zlib?)のzipは相性というかそういうのが何かあるんですかね。
原因はよく分かりませんが、PHPExcelはPCLZipを同梱してて、そっちを使うことも出来るようです。
excelファイル開く前に

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);

ってするみたいですので、試してみては。
https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/01-Getting-Started.md#php-complains-about-ziparchive-not-being-found

2015/12/30 18:34:45

その他の回答0件)

匿名回答1号 No.1

ここでベストアンサー

xlsx形式のファイルはxmlをzipで固めたものです。
拡張子をzipに変えて開き、中の「_rels\.rels」に「Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"」という記述がありませんか?
もしzipで開けない、上記のファイルがない、記述がないとなるとPHPExcelはxlsxとして認識しません。ファイルが壊れていないか、暗号化されていないか確認してください。
もしファイルが開ける、記述もあるという場合、phpでzipがうまく開けないのかも知れません。
zipのライブラリやphpのバージョンが新しいか確認してみてはどうでしょう。

匿名質問者

ありがとうございました。

2015/12/30 10:52:02
匿名回答1号

遅くなりましたが……
zipにも色々微妙な癖というか違いがある様で、microsoftのzipとphp(zlib?)のzipは相性というかそういうのが何かあるんですかね。
原因はよく分かりませんが、PHPExcelはPCLZipを同梱してて、そっちを使うことも出来るようです。
excelファイル開く前に

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);

ってするみたいですので、試してみては。
https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/01-Getting-Started.md#php-complains-about-ziparchive-not-being-found

2015/12/30 18:34:45
匿名質問者

質問者から

匿名質問者2015/12/30 23:05:13

匿名回答1号 様 の回答を元の.zipファイルとして解凍してみました…

ローカル(ウィンドウズ上)では、問題なく開くことができ、_rels\.relsの存在も確認できました。

そこで、

今度は、サーバー上(OCNホスティング)で、ZipArchive()を使い.xlsxを解凍のみをおこなって見たところ21(ER_INCONS)が返ってきて、解凍できませんでした。

さらに、shell_exec('unzip '…)を使い解凍を試みたところ、解凍は、できたのですが、

xl\worksheets\sheet1.xmlの中に以下のようなXMLとして解釈できない記述ができてしまいます。

<c r="AA485" s="3"><v>9174</v></c><c r=">42"A485" s="1" t="ss="3"><v>9174</v> t="ss="3"><v>9174

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません