Gnumeric にてファイルサイズが重くなる問題
表計算ソフトは Gnumeric (グニューメリック)を使っている。
最初は LibreOffice Calc (リブレオフィス カルク)を使っていたが Gnumeric のほうが動作が軽快(気のせいかもしれない)。
Gnumeric には満足しているのだが、時々変な挙動だったり、バグ?のような動きをすることがある。
ファイルサイズが突然重くなるのも、そのひとつ。
100KB前後の xlsx ファイルが7MBとかになる。
検証
それ以来、保存するたびにファイルサイズをチェックしているのだが、保存するたびに重くなっているわけではない。
だが、たまに保存に時間がかかり、重くなっている。理由は分からず。
空白行列の削除や属性の見直し、関数の軽量化などを試してみたが、効果なし。
→重くなったExcelファイルを軽くする方法5選 : クレッシェンド
とりあえず、問題の原因を探ってみることに。
まずはサイズが増えた xlsx ファイルのコピーを作成。
シートが5つあるので、1つずつ削除していき、ファイルの増減を見る。
その結果
シートA → 3.5MB
シートB → 3.5MB
シートCDE → 増減なし
ちょうど半々ずつサイズが減少したので、シートAとシートBに原因があるのが分かった。
次に新しいシートを作成して、データのみを丸々コピー。
その後、元のシートを削除してみた。
その結果
シートA → 3.5MB
シートB → 3.5MB
とこちらも半々ずつ減少。
使用しているデータや数式、書式、セルの設定などが悪さしている訳でもないらしい。
となると、使っていない部分、つまり空白行列に問題がある。
だけど、空白行列の削除はしたし……。
LibreOffice Calc で重くなったファイルを開いてみる
それからしばらく、解決法が浮かばず、放置していたのだが、ふと「 Gnumeric 以外で開いてみたらどうなるのか?」疑問に思った。
Gnumeric に移行する前は LibreOffice Calc を使っていたので、これで開いてみることに。
すると
警告ドキュメント (ファイル名).xlsx を読み込む際:
シートごとの列の最大数を超えているため、データの一部が読み込まれていません。
と書かれたポップアップが出てきた。
このメッセージで検索してみると、以下の知恵袋を見つけた。
→LibreOfficeについて質問です。EXCELをLibreOfficeで開こうとすると…… : Yahoo!知恵袋
扱える列数を超えているため、データを表示できていないのではないか?という意見。
Excel は16,384列
LibreOffice Calc は1,024列
じゃあ Gnumeric はどのくらいなのか?
この記事によると、256列だった。
→How many sheets, rows, and columns can a spreadsheet have? : Computer Hope
行も Excel と LibreOffice Calc は1,048,576行なのだが Gnumeric は65,536行と一番低い。
とりあえず LibreOffice Calc でも空白行列の削除を試したところ、ファイルサイズは元のサイズ(100KB)に戻った。
問題の原因1 : 大量の空白行列が出来てしまったから?
仕様なのか、操作ミスなのか、バグなのか分からないが、大量の列(行の可能性もあり)が出来てしまい Gnumeric で扱える列数を超えた。
それが原因で、データが重くなり、読み込みも遅くなっている?
でも LibreOffice Calc の最大列数すら超えているのが気になった。
最大が256列なのに、1024列以上作れてしまっていることになる。
最大上限でストップするのが普通ではないか?
問題の原因2 : ファイル形式が XLSX だから?
これは多分 xlsx ファイルなのが原因なのだと思う。
Gnumeric では互換性があり、 xlsx ファイルでも問題なく使える。
だが、 Excel が扱える列は16,384列に対して Gnumeric は256列。
行は1,048,576行に対して、65,536行。
どちらも Excel と比べて、かなり少ない。
何かの拍子で Excel で扱える最大行列まで出来てしまい、ファイルサイズも桁違いに増えてしまう。
その際 Gnumeric で空白行列の削除をしても、256列65,536行しか表示されていないので、削除できているのもその部分だけ。
16,126行983,040行残っていることになる(使用しているデータ分、空白行列はもうちょっと少ないはずだが)。
だから Gnumeric で空白行列の削除をしても、ファイルサイズは変わらなかった。
全部消すには列は60回、行は15回程度繰り返す必要がある。
対して LibreOffice Calc では1,024列1,048,576行扱える。
列は15回程度繰り返す必要があるが、行は1回で終わる。
LibreOffice Calc で空白行列の削除をした際、1回でファイルサイズが元に戻ったので、行列の中でも空白行に問題があったことが分かる。
Gnumeric では65,536行しか扱えないのに、1,048,576行出来ちゃったら、重くなるのも当然か……。
これが合っているのかどうかは分からないが。
解決策
使っているソフトのファイル形式を使えば、これらの問題は回避できることになる。
Gnumeric → Gnumeric XML( .gnumeric )
LibreOffice Calc → ODF 表計算ドキュメント( .ods )
LibreOffice Calc のほうが安定している?
今回の問題で久しぶりに LibreOffice Calc を使ったが、以前のようなモッサリ感がなくなっていた。
それでも Gnumeric の方が動作が速いと思うが(体感)、ときどき「ん?」と思うような挙動だったり、バグ?のような動きをすることがある。
今回の問題然り、以前書いたステータスバーが消える問題だったり。
→『Gnumeric のステータスバーが消える問題』を読む
LibreOffice Calc のほうが安定して使えるのかもしれない。
ただ、今回の問題は扱える行列の数や拡張子など、まったく気にしたことがなかった部分に目を向けるきっかけになった。
問題の原因を探っていくのは謎解きみたいで面白かったので、今後も Gnumeric 続投です。
ディスカッション
コメント一覧
まだ、コメントがありません