雑多なブログ

音楽や語学、プログラム関連の話題について書いています

PHP: PhpSpreadSheetでシートがうまく読み込めなくてハマった。

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>

docs.microsoft.com

対策

問題の起きているExcelファイルの任意の要素を、Excelで編集して(編集モードに切り替えて、エンター押すだけで良い)保存すると、内部のデータがリフレッシュされて、『x:』というネームスペースも削除される。
うーん。かなり微妙な対応だ。しかし、今のところそれくらいしか有効な対策が見つかっていない。

他に良い対処方法があるかはもう少し調べてみる予定。