1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

xlsxファイルが開けない原因データ特定方法

Posted at

こんなことありませんか?

プロダクトの機能の一部にデータをExcelにエクスポートする機能があったとする。
その機能を利用して、とあるユーザーのデータをExcelにエクスポートしてみた。
そのエクセルファイルを開こうとすると、このように、「ファイル名.xlsxの一部の内容に問題が見つかりました。可能な限り内容を回復しますか?」という表示が出る。

image.png

「はい」を選択すると
データが記載されているはずのシートが真っ白!
こんなときの原因特定方法を記しておく。

現象の仮説

このExcelファイルはDBにあるレコードを展開している。
このエクスポート機能自体に問題があるわけではない。
ということは、そのデータ自体が悪さをしている。
問題はそれが一体どのデータかを特定すること。
特定できればデータを修正すれば問題なく開けるようになるのではないか。

エラー原因の情報を拾う

強引に開こうとするとこの表示が出るので、

image.png

「表示」を選択すると
このように、エラーの原因となった部分を知ることができる。
image.png

どうやら、/x1/worksheets/sheet2.xmlの2行目の1,103,212列目に問題がある。

xml?

実は、「.xlsx」形式のファイルは内部情報を記録したxmlファイルの集合体である。
なので、そのxlsxを構成する、xmlを見ることができれば、問題のデータを特定できる

xlsxを分解する

  1. xlsxファイルの拡張子をzipに変更する
  2. それをターミナルからunzipする
  3. unzip zipのファイルパス

するとこのように構成ファイルが展開される。

image.png

原因データ特定

あとは展開されたものの中に、
/x1/worksheets/sheet2.xmlがあるので、vscodeで開き、2行目の1,103,212列目を探す。
image.png

それが分かれば、DB内の、どのレコードが原因か突き止めることができると思うので、サクッとデータ修正をして再度エクスポート機能を試してみる。エクスポートしたxlsxファイルが問題なく開くことができればクリア

参考)
https://answers.microsoft.com/ja-jp/msoffice/forum/all/%EF%BD%98%EF%BD%8C%EF%BD%93%EF%BD%98%E3%81%8B/cf52d151-0440-4b2a-861c-72976f7113bf

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?