ビジネス課題への解決策(アイディア)と、新たな発想(+α)が見つかるIT情報メディア

Menu
  1. TOP
  2. データ活用
  3. Excel互換ソフトウェアで、Microsoft Excelが作成した「.xlsx」ファイルを読むと、セルの先頭にある全角スペースが消える?

Excel互換ソフトウェアで、Microsoft Excelが作成した「.xlsx」ファイルを読むと、セルの先頭にある全角スペースが消える?

  • LINEで送る
  • このエントリーをはてなブックマークに追加

社内や自宅でMicrosoft Officeを利用している方は多いと思います。

文書作成のMicrosoft Word、表計算のMicrosoft Excel、プレゼンテーションのMicrosoft PowerPointなどは、なじみがあるのではないでしょうか。
「以前はMicrosoft Accessでつくった小規模データベースを使っていたけれど…」という方もいらっしゃると思います。

個人的には、デジタルノートのMicrosoft OneNoteを使っていたのですが、昨今のセキュリティ強化に関連して会議の場やお客様への訪問時などにノートPCを持ち込まなくなってからは、使用する機会もめっきり少なくなりました…

今回は、Microsoft Excelの「.xlsx」ファイルで起きた、ある事象のお話です。

.xlsxファイルとは

Excelブック(ファイル)は、Microsoft Excel 2003までは独自ファイル形式の「.xls」でしたが、Microsoft Office 2007からはXMLをベースにしたOffice Open XML形式が新たに採用され、拡張子も「.xlsx」(マクロの無いブック)や「.xlsm」(マクロ有効ブック)となりました。

データの先頭にある全角スペースが無くなる?

この「.xlsx」ファイルについて、先日こんな事象がありました。

Microsoft Excelで、全角スペースから始まる文字列をセルに入力して「.xlsx」形式で保存し、そのファイルをMicrosoft Excelではない別の互換ソフトウェアで読み込んだところ、全角スペースが欠落してしまった

今回は、このトラブルを検証してみたいと思います。

現象の再現

現象確認のために、「半角スペースから始まる文字列」と「全角スペースから始まる文字列」が含まれたファイルを使用します。
まず、Microsoft Excelで「.xlsx」ファイルを作成し、そのファイルを開いてみました。
半角スペース= (黄色)
全角スペース= (赤色)
で表しています。

    • Microsoft Excelで作成した「.xlsx」ファイルを、再度Microsoft Excelで読み込んだ場合
      半角スペース3個から始まる文字列
      全角スペース3個から始まる文字列
    • Excel互換ソフトウェアで、Microsoft Excelで作成した「.xlsx」ファイルを読み込んだ場合
            半角スペース3個から始まる文字列
         全角スペース3個から始まる文字列

確かに、Excel互換ソフトウェアでは、文字列の先頭にあった全角スペースが消えてしまいました。
次に、ExcelではなくExcel互換ソフトウェアで同じ内容の「.xlsx」ファイルを作成し、そのファイルを開いてみました。

    • Excel互換ソフトウェアで作成した「.xlsx」ファイルを、再度別のExcel互換ソフトウェアで読み込んだ場合
            半角スペース3個から始まる文字列
         全角スペース3個から始まる文字列
    • Microsoft Excelで、Excel互換ソフトウェアで作成した「.xlsx」ファイルを読み込んだ場合
            半角スペース3個から始まる文字列
         全角スペース3個から始まる文字列

このExcel互換ソフトウェアは、xlsファイルも読み込めるので、試しにMicrosoft Excelで同じ条件の「.xls」ファイルを作成し、それを別のExcel互換ソフトウェアに読み込ませてみました。

    • Microsoft Excelで作成した「.xls」ファイルを、再度Microsoft Excelで読み込んだ場合
           半角スペース3個から始まる文字列
         全角スペース3個から始まる文字列
    • Excel互換ソフトウェアで、Microsoft Excelで作成した「.xls」ファイルを読み込んだ場合
           半角スペース3個から始まる文字列
         全角スペース3個から始まる文字列

このパターンでも、双方共に全角スペースは欠落しませんでした。
ということは、Excel互換ソフトウェアがデータ先頭にある全角スペースを処理できないわけでは無さそうです。

これらより、Microsoft Excelが生成する「.xlsx」ファイルと、Excel互換ソフトウェアが生成する「.xlsx」ファイルの「全角スペースが先頭にあるセル」のデータ部に何か違いがありそうです。

Office Open XML形式の仕様

「Office Open XML形式」の仕様は、ISO/IEC 29500で標準化されており、ISOで有償公開されています。「お金を払わないと仕様を見ることができないのか…」と思ったのですが、このISO/IEC 29500、ECMA-376で先行して標準化されているのです。で、ECMAのサイトを見てみると、『ECMA-376 4th edition is technically aligned with ISO/IEC 29500.』という記述があります。そして、この「ECMA-376 4th edition」の仕様書は、無償で公開されています。

こちらの仕様書「ECMA-376 4th edition」を手元に用意しつつ、「.xlsx」ファイルの中身を見てみましょう。

「.xlsx」ファイルは、Excelブックを構成する各種データがzipで圧縮されているものなので、拡張子を「.zip」に変更して解凍してみると、

Z:BOOK1
│ [Content_Types].xml
├─docProps
│ app.xml
│ core.xml
├─xl
│ │ sharedStrings.xml
│ │ styles.xml
│ │ workbook.xml
│ ├─theme
│ │ theme1.xml
│ ├─worksheets
│ │ sheet
1.xml
│ │ sheet2.xml
│ │ sheet3.xml
│ └─_rels
│ workbook.xml.rels
└─_rels
.rels
/td>

このようなファイル群が解凍されました。
これらが、「.xlsx」ファイルを構成している中身です。それぞれ見ていくとおもしろいのですが、とりあえず気にしないことにして…
このファイル群の中で、データが格納されているのは「sharedStrings.xml」なので、その中身を見てみます。

  それぞれのセルにあたる箇所のXMLを抜粋すると、

  • 「 半角スペース3個から始まる文字列」が格納されたセル
         半角スペース3個から始まる文字列~(中略)~
  • 「全角スペース3個から始まる文字列」が格納されたセル
       全角スペース3個から始まる文字列~(中略)~

となっています。

念のため、「.xlsx」ファイルのスペースの処理がOffice Open XMLでどのように規定されているか見ておきます。
「ECMA-376 4th edition」の「18. SpreadsheetML Reference Material」に、次のように記載されています。

Specifies how white space should be handled for the contents of this element using the W3C space preservation rules.

「空白は、W3Cのルールに従うよ」と。
ということは、ここでの「white space」は、XML1.0の定義にある『"white space" (spaces, tabs, and blank lines)』となり、全角スペースは対象外。なので、全角スペースは文字として扱われ、「white space」を保持するためのxml:space="preserve"の記述は不要、というわけですね。

では、Excel互換ソフトウェアが生成した「.xlsx」ファイルの「sharedStrings.xml」を見てみます。
それぞれのセルにあたるところのXMLを抜粋すると、

  • 「半角スペース3個から始まる文字列」が格納されたセル
         半角スペース3個から始まる文字列~(中略)~
  • 「全角スペース3個から始まる文字列」が格納されたセル
       全角スペース3個から始まる文字列~(中略)~

となっています。
Microsoft Excelが生成した「.xlsx」ファイルとは異なり、Excel互換ソフトウェアが生成した「.xlsx」ファイルでは、先頭に全角スペースを出力するときも、「xml:space="preserve"」が出力されました。

検証結果

これらの動作から、

  • Microsoft Excelの動作
    →全角スペースは文字、半角スペースは「white space」として扱っている
  • Excel互換ソフトウェアの動作
    →全角スペース、半角スペース共に「white space」として扱っている

という判定になっていることがわかります。

この仕様…

さて、ここまでで何か気付いたかたもいらっしゃるのではないでしょうか。

   全角スペース3個から始まる文字列~(中略)~

で、先頭にある全角スペースが無くなる、という動作。そんな言語やXMLパーサー、他にもありますよね?
これは推測ですが、今回使ったExcel互換ソフトウェアは、全角スペースも「white space」として扱う言語またはXMLパーサーで作成されていて、処理をそれらに任せてしまっていることが原因で、「.xlsx」ファイルを読み込むときに、データ先頭の全角スペースが欠落しているのではないでしょうか?
実際の原因がどちらなのかはわかりませんが…

互換製品ならそのあたりも対処して欲しいところなのですが、例えば「2バイト文字」を使用することのないシングルバイト地域で作成された製品だと、こういったデータがあることに気が付かないのでしょうね…

おまけ

Microsoft Excelに、「space="preserve"」を削除した

 半角スペース~(中略)~

が含まれた「.xlsx」ファイルを渡してみました。

その結果、

「読み取れない内容が含まれる」と怒られました…
Microsoft Excelは起動時に、ファイルのフォーマットを厳密にチェックしているようです。
ここで「はい」をクリックすると、半角スペースが無くなった状態で回復されます。

同様に、この「.xlsx」ファイルをExcel互換ソフトウェアに渡してみたところ、エラーは出ずに半角スペースが削除されて表示されました。XMLファイル的には問題のあるファイルではないからなんでしょうね…


データの抽出や加工、連携にお悩みではありませんか?

20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。

> 純国産ETLツール「Waha! Transformer」

Waha! Transformer
メールマガジンの登録はこちらから
メルマガ登録 お問い合わせ