ルビーを使用してExcelファイルを解析
この記事では、私はいくつかの言語のRubyライブラリのアクセスExcelファイルに審査されます。私は、異なるフォーマットでExcelファイルにアクセスするためのいくつかの既存のRubyライブラリについて説明します。この記事では、Excelファイルを読み込んで、より焦点を当て、だけでなく、変化に/ Excelファイルもう少し議論を記述します。
あなたは、コードを参照するのを待つことができない場合は、提出する私のGitHubの上で移動してくださいプロジェクトを 、プロジェクトがExcelファイルを読み込むためにいくつかのコードスニペットを持って、この資料に記載されています。
Excelファイルの種類
我々は別のRubyライブラリに入る前に、のは、Excelファイルについて話しましょう。あなたが使用しようとしているExcelファイルの種類を特定することが重要です。従来のファイルおよびMicrosoft Office 2007で導入された新しいOOXMLファイル形式:主に2つのタイプがあります。
素敵ある違いの説明 ウィキペディアには。tldr; バージョンは、従来のファイル形式は、以下の拡張子を持つファイルが含まれていることです。
ファイル名の拡張子 | 説明 |
---|---|
.XLS | 従来のExcelファイル形式 |
.XLT | Excelテンプレートの伝統的な形式 |
.xlm | 伝統的なマクロコードでExcelファイル形式 |
マイクロソフトExcel 2007がレガシーバイナリ形式を放棄しに切り替えオープンオフィスXML 、今日使用されている(OOXML)フォーマット。これらのファイルは以下の拡張子を使用します。
ファイル名の拡張子 | 説明 |
---|---|
.xlsx | OOXML Excelファイル |
.xlst | OOXMLのExcelファイルのテンプレート |
.xlsm | マクロをOOXML Excelファイル |
Excelファイル形式(従来の形式またはOOOXML形式)は、あなたが関わることになることが非常に重要であるかを決定。あなたはExcelソフトウェアを使用する場合の作業は、多くの場合、様々なフォーマットの間で行くことになるかもしれないが、私のシナリオでは、Excelファイルは、外部のファイル形式から受信され、制御することはできませんが、私は、マニュアルフォーマットに依存したくありません変換。そして不要、現代の.xlsx形式は、一般的に、スプレッドシートにアクセスするために他のソフトウェアを使用することはできませんがあります。たとえば数字 やLibreOfficeのを。
RubyでExcelのライブラリ
あまりよいExcel--にアクセスするための多くのRubyライブラリがあります。私はこれらの異なるライブラリーを研究すると、本当にその機能と限界を把握するために多くの時間を費やしました。私は研究のためのライブラリーのための便利な以下の質問を見つけました:
- 何エクセルファイル形式をサポートしていますか?
- サポートは、読み取りまたは書き込み、またはその読み取りと書き込みがサポートされていますか?
- 私は巨大なファイルをサポートすることができますか?すばやく?
- 私は、ファイルを読み込む必要がありますか?あなたはストリーミングモードをサポートすることができますか?
アプリケーションに応じて、これらの問題のいくつかまたは全てが非常に重要であるかもしれません。
適切なライブラリを選択します
次の表は、ライブラリにアクセスするための六つの異なる機能ルビーExcelを詳しく説明します。
倉庫 | 許します | 支持.xlsx |
支持.xls |
能力 |
---|---|---|---|---|
axlsx | WITH | はい | 番号 | 書く |
rubyXL | WITH | はい | 番号 | 読み書き |
ROO | WITH | はい | はい | 読む |
クリーク | WITH | はい | 番号 | 読む |
スプレッドシート | GPLv3の | 番号 | はい | 読み書き |
simple_xlsx_reader | WITH | はい | 番号 | 読む |
あなたのニーズに基づいて、その一つ以上のライブラリが助けてくれるかもしれません。以下の使用シナリオを考えてみましょう:
.xlsxファイルを書きます
あなたが書く必要がある場合はaxslxを良い選択です。これは、グラフを生成し、セルの値を書き込むサポートしています。あなたは軽量なライブラリが必要な場合は、rubyXLは 良いオプションです。 .xlsx文件,
.xlsxファイルを読みます
あなただけの読み取りに必要がある場合は 、ファイルを、次のことができrubyXL、ルー、クリークとsimple_xlsx_readerの中から選びます。それはまた、伝統的なサポートしているのでROOは、非常に人気があり、小川や大きなファイルを扱うに明確に、より熟達simple_xlsx_readerを。あなたからしたい場合 (ファイルではなく)データ・ストリームを読み込み、rubyXLが 唯一の選択肢となりました。 .xlsx
.xls格式。然而,如果你关注速度,
IO
.xlsxファイルの読み取りと書き込み
あなたが読み書きする必要がある場合は.xlsx
、ファイルを、次の2つのオプションがあります。あなたが使用することができますrubyXLを、それが読み取りと書き込みをサポートしています。別のオプションを使用すると、2つの異なるライブラリ、読書用、書き込みのための1つを使用することができるということです。
Excelファイルの伝統を読み書き
伝統的なサポートするために.xls
フォーマットすると、より多くの制約があります。あなたが唯一の伝統的なサポートが必要な場合は、スプレッドシートを、それが読み取りと書き込みをサポートしています。あなたはまた、サポートが必要な場合は、あなたが選択することができますRooの 、伝統的な形式を読み、両方のサポートをも近代的なフォーマットをサポートしています。 .xls,我推荐
.xlsx格式,我更推荐选择第二个gem来做此事......除非你仅仅需要读取功能,这样的话
良いニュースは、あなたが最終的に、ライブラリの種類を選択し、ファイルを開き、コードを読んでいるかどうか、非常に簡単で、別のライブラリを使用して非常に似ています。例えば、ここでの使用である小川コード。
'小川'が必要です ワークブック=クリーク:: Book.new 'パス/に/ file.xlsx' ワークシート= workbook.sheets worksheets.each DO |ワークシート| worksheet.rows.each行う|行| row_cells = row.values row_cellsを持つ#何か エンド・ エンド
私はに提出するサンプルコードは、それぞれのの.xlsxを読み取るためのライブラリを使用してありますが、GitHubの上のプロジェクト。
演奏
あなたがExcelファイル内のデータの膨大な量を読み取るために必要がある場合は、それぞれのライブラリーの性能を比較することがあります。私はすぐに4種類読み取ることができ、上記の表に試験し、やや汚れたコードのパフォーマンステストプログラムを確立しました。 .xlsx格式的库
私は、サンプル作成.xlsx文件,分别含有
500,10000,50000,200000とデータ500,000行を。それから私は(つまり、データファイル内のすべての行を読んで)各ファイルを読み込むためのコードを実行します。さまざまなライブラリのコードを読むために各サンプルファイルを再することができる、ここで 得ました。
私は(パス時間当たりの変化が素晴らしいではありません)個々のライブラリファイルは、平均時間を記録し、3回実行されているお読みください。
rubyXL 和 roo性能大体相当, 读取500000行的Excel文件需要2分多钟。 creek 和simple_xlsx_reader 则都快的多了,只需要不足一分钟就能读取 500000行的Excel文件。
我希望本文能为你使用Ruby语言访问Excel文件提供些许地指引。如果你正在使用一种我没有提到的库,并且你很喜欢它,请务必告知我。