PhpSpreadSheetでシートが読み込めない!
PhpSpreadSheetでExcelのファイルを読み込んで、あれこれ処理を行うプログラムを開発していたのだけど、何故かシートが読み込めないトラブルに遭遇した。
読み込めない原因は?
Excelの内部のデータを確認したところ、問題の発生しているExcelのファイルのxmlの要素には『x:〜』というネームスペースが割り当てられていた事がわかった(一例として『x:sheet』など)。 PhpSpreadSheetは、このネームスペース付きのExcelファイルを正常に読み込む事ができないのだ(2020年4月22日時点)。
なお、『x:〜』というネームスペースは、Open XML SDKを使って実装されたWindows?アプリケーションから出力されたExcelのファイルの要素にはネームスペース『x:』が付加されるようだ。
<?xml version="1.0" encoding="utf-8"?> <x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <x:sheets> <x:sheet name="mySheet" sheetId="1" r:id="Rddc7711f116045e5" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" /> </x:sheets> </x:workbook>
対策
問題の起きているExcelファイルの任意の要素を、Excelで編集して(編集モードに切り替えて、エンター押すだけで良い)保存すると、内部のデータがリフレッシュされて、『x:』というネームスペースも削除される。
うーん。かなり微妙な対応だ。しかし、今のところそれくらいしか有効な対策が見つかっていない。
他に良い対処方法があるかはもう少し調べてみる予定。