こんなことありませんか?
プロダクトの機能の一部にデータをExcelにエクスポートする機能があったとする。
その機能を利用して、とあるユーザーのデータをExcelにエクスポートしてみた。
そのエクセルファイルを開こうとすると、このように、「ファイル名.xlsxの一部の内容に問題が見つかりました。可能な限り内容を回復しますか?」という表示が出る。
「はい」を選択すると
データが記載されているはずのシートが真っ白!
こんなときの原因特定方法を記しておく。
現象の仮説
このExcelファイルはDBにあるレコードを展開している。
このエクスポート機能自体に問題があるわけではない。
ということは、そのデータ自体が悪さをしている。
問題はそれが一体どのデータかを特定すること。
特定できればデータを修正すれば問題なく開けるようになるのではないか。
エラー原因の情報を拾う
強引に開こうとするとこの表示が出るので、
「表示」を選択すると
このように、エラーの原因となった部分を知ることができる。
どうやら、/x1/worksheets/sheet2.xmlの2行目の1,103,212列目に問題がある。
xml?
実は、「.xlsx」形式のファイルは内部情報を記録したxmlファイルの集合体である。
なので、そのxlsxを構成する、xmlを見ることができれば、問題のデータを特定できる
xlsxを分解する
- xlsxファイルの拡張子をzipに変更する
- それをターミナルからunzipする
unzip zipのファイルパス
するとこのように構成ファイルが展開される。
原因データ特定
あとは展開されたものの中に、
/x1/worksheets/sheet2.xmlがあるので、vscodeで開き、2行目の1,103,212列目を探す。
それが分かれば、DB内の、どのレコードが原因か突き止めることができると思うので、サクッとデータ修正をして再度エクスポート機能を試してみる。エクスポートしたxlsxファイルが問題なく開くことができればクリア