実際の失敗談からの展開になります
openpyxl で作ったエクセルファイルがやけに大きい
あれれ、何かおかしいぞ?
前々から ii-win-merge は少し重たくて、ii-diff は軽い!!
そんな印象を持っていたんですが
100 を超えるファイルを比較したときに、顕著にその差が見て取れて
ついに「おかしい!」と確信する事態となりました!!
重たい!という症状は
PC 全体の動きがもっさりしだすし
タスクマネージャを見ると メモリはフルに・・・
HDD も 14GB くらいの余裕があったのに
数百MB まで落ちている
そして、最終的にエラーで結果の出力ができない!ときた・・・
絶対、どこかでメモリリークのような開放漏れがあるんだろうと思いました
そこからは いろいろと トライ&エラー です orz
1回のトライ(ここを変えたらどうなる?ってお試し)に 3~5H かかりました
なんせ
100 を超えるファイルを比較して、処理が終わるころにエラーするもんだから
いちいち時間がかかる
そして、その間、PC が重くなるから、何もできなくなります
難航しました・・・
原因がわかったのは
ファイル数を 50個くらいに抑えて出力した結果を ii-diff の結果と比較しているときでした
差分表の最後の行から Ctrl+下 でジャンプするファイルの最終行の位置が違う!!
そこに気づき着目しました!
ii-diff は 1,048,576行 (← 最新のエクセルで扱える最大行数)
ii-win-merge は 65,535行
行数が少ない ii-win-merge の方がファイルが大きくなるのはなぜ?と思う人もいるかもしれないですが・・・
ii-diff は値の入っている有効行が 差分表の最後の行(116行目)なのでエクセルの最終行に飛び
ii-win-merge は エクセルの最終行に飛ばないので、
差分表の後にも値の入っている行があって、その値の入っている最後の有効行に飛んだのだろう
そう解釈をしました (;^ω^)
よく見ると
実際
上図のようにグレー塗のセルが 65,535行まで続いていました
絶対これやん!!
そこを修正したら、さっくり軽くなり、約 7分 で結果出力できるようになりました ('ω')ノシ
シート当たりのデータ量が無駄に多かったんだもん
そら重いわな・・・
結論
openpyxl は ワークブックの save() で時間がかかります
保持していたデータを xml にして、エクセルのファイル構成を作って
zip に圧縮するらしいです
データ量に比例して時間が増えますので、
小さなデータを扱っているつもりなのに、とても時間がかかるときは
私のように
意図せず広い範囲のセルを使っていないか、ご確認くださいませ 🙇♂️🙇♂️🙇♂️