日々適当

hibitekitou

Googleスプレッドシートから書き出したエクセルファイルが壊れていたこと

pc |2016-08-16
表題通りなのですが、Excelでちょっと複雑な設定を行ったファイルを作成し、それをGoogleスプレッドシートに読み込んだ上で、メンバーで寄ってたかって編集をしていたそうです(要はスケジュール管理をそれでしていたそうで)。で、ある時点の状態をエクセルファイルとして書き出す必要が生じたので書き出しました。



そしたら、エクセルで開くと壊れていると怒られるものだったようです。



OpenDocument形式でも書き出せたので、それで書き出してLibreOfficeあたりで開こうとしてもやっぱり開けず、スプレッドシート上で問題を抱えている可能性が高いと判断します。

ということで、原因特定のために、エクセルファイルの中身を調べてみることにしました。xlsxファイルは拡張子をzipにするとzipファイルとして伸長することができ、その結果、フォルダの中に複数のファイルで構成されたファイル群として取り扱うことができます。



エクセルのシートにあたる部分はxmlファイルのようです。
ということで、xmlファイルの素性をチェックするツールを利用します。 xmllintっていうツールですね。こちら、OS Xには標準で入っております。xmlの文法なんかをチェックし、必要があれば整形が可能なものだそうです。今回は検証だけです。

xmllint --noout --valid ~/Desktop/problemFile/xl/worksheets/sheet1.xml

エクセルファイにした時のシート1で問題が起こっていたようなので、上記コマンドを実行しました。その結果下図のような結果となりました。



このファイルをエディタで開き(Visual Studio Codeで開きました)、上図の結果にあるセルを表していると思われる箇所「 r="C93" s="387" 」で検索すると一軒ヒットします。



上図はお仕事上の内容なので一部をぼかしてありますけど、ぼかしてある2カ所は、左側がカタカナ、空白挟んで右側がアルファベットとなっています。セルに記入された文字列に相当する部分のようです。ともあれ、これで93行目に問題があることがわかります。というわけで、Googleスプレッドシート上で上図ぼかした文字列が書かれたセルを選択してコピーしました。で、Jeditにペーストします。すると、Jedit、落ちました。カタカナの部分から空白に見える部分までの間に非常に問題のある文字列が含まれているということなのでしょう(アルファベット部分には多分問題はない)。
ということで、その問題のセルを確実に問題のない内容に書き換えるか、その問題のセルを含む行を削除することで、スプレッドシートから掻き出されるエクセルファイルが普通にExcelに読み込まれるようになりました。

しかしなんでこんな情報が書き込まれたのか… というメモ。

コメント ( 0 )|Trackback ( )
  ・