Rubyでxlsxファイルを扱う5つのステップ

プログラミング言語RubyでExcelのxlsxファイルを操作する方法を表したイメージRuby
この記事は約12分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

ようこそ、この記事へ。

プログラミングの世界は、限りない可能性を秘めています。

今日はRuby言語を利用して、xlsx形式のExcelファイルを操作する方法について、初心者の方でも理解できるよう詳細に解説します。

この記事を読めば、Excelファイルの生成から読み込み、編集まで、Ruby言語で完結するための5つのステップを身につけることができます。

それぞれのステップには詳細な説明とサンプルコードが用意されており、自分の手を動かしながら学べる形になっています。

●Rubyとxlsxファイルの基本

ここでは、Ruby言語とxlsxファイルの基本的な知識について説明します。

○Rubyとは

Rubyは、まつもとゆきひろ氏によって開発されたプログラミング言語です。

人間が直感的に理解しやすい自然な表現力を備えており、高い生産性と読みやすさが特徴です。

Web開発やデータ処理、スクリプト作成など、さまざまな用途で活用されています。

○xlsxファイルとは

xlsxファイルとは、Microsoft Excelが2007年版から採用しているファイル形式の一つです。

表計算ソフトとして広く使われているExcelでは、データの整理・集計・分析など、多彩な業務を効率的に進めることが可能です。

xlsx形式のファイルは、その高い汎用性からビジネスの現場で広く利用されています。

●Rubyでxlsxファイルを操作するための準備

次に、Rubyでxlsxファイルを操作するための準備をします。

○必要なライブラリのインストール

Rubyでxlsxファイルを操作するためには、’roo’や’rubyXL’といったライブラリをインストールする必要があります。

これらのライブラリはxlsxファイルを読み書きするための機能を提供しています。

下記のコードは、これらのライブラリをインストールするためのコマンドです。

コマンドプロンプトやターミナルで実行してください。

gem install roo
gem install rubyXL

これで準備は完了です。

次に、Rubyでxlsxファイルを操作する基本的な方法を見ていきましょう。

●Rubyでxlsxファイルを操作する方法

それでは、Rubyを使ってxlsxファイルを操作する方法について解説します。

下記のサンプルコードは、xlsxファイルの生成、読み込み、編集を行うためのものです。

それぞれのサンプルコードの後には、そのコードを実行した際の結果も紹介します。

○サンプルコード1:xlsxファイルの生成

まずは、Rubyを使用して新たなxlsxファイルを生成する方法について学びましょう。

この操作は、Rubyのライブラリ「rubyXL」を使用します。

require 'rubyXL'

# 新しいワークブック(Excelファイル)を生成
workbook = RubyXL::Workbook.new

# ワークブックをファイルとして保存
workbook.write('new_file.xlsx')

このコードでは、まずrubyXLライブラリを読み込んでいます。

次に、RubyXL::Workbook.newというメソッドを使って新たなワークブックを生成しています。

ワークブックはExcelファイルそのものを指し、これに対して操作を行うことでExcelファイルの編集を行います。

最後に、生成したワークブックを’new_file.xlsx’という名前で保存しています。

このwriteメソッドは引数にファイル名を取り、その名前でワークブックを保存します。

このコードを実行すると、実行したディレクトリに’new_file.xlsx’という新たなExcelファイルが生成されます。

○サンプルコード2:xlsxファイルの読み込み

次に、Rubyを使用して既存のxlsxファイルを読み込む方法を見ていきましょう。

下記のコードは、先ほど生成した’new_file.xlsx’を読み込む例です。

require 'rubyXL'

# ファイルを読み込む
workbook = RubyXL::Parser.parse('new_file.xlsx')

このコードでは、まずrubyXLライブラリを読み込んでいます。

その後、RubyXL::Parser.parseというメソッドを使用して’new_file.xlsx’を読み込んでいます。

このメソッドは引数にxlsxファイルの名前を取り、そのファイルを読み込むことができます。

このコードを実行すると、’new_file.xlsx’が読み込まれ、その内容をRubyで操作するためのオブジェクトが生成されます。

○サンプルコード3:xlsxファイルの編集

続いては、Rubyを使用してxlsxファイルを編集する方法を見ていきましょう。

下記のコードは、先ほど読み込んだ’new_file.xlsx’の一番目のシートのA1セルに”Hello, Excel!”という文字列を書き込む例です。

require 'rubyXL'

# ファイルを読み込む
workbook = RubyXL::Parser.parse('new_file.xlsx')

# 一番目のシートを取得
worksheet =

 workbook[0]

# A1セルに文字列を書き込む
worksheet.add_cell(0, 0, 'Hello, Excel!')

# 編集した内容を保存
workbook.write('new_file.xlsx')

このコードでは、先ほどと同様にrubyXLライブラリを読み込み、’new_file.xlsx’を読み込んでいます。

次に、workbook[0]で一番目のシートを取得しています。

そして、worksheet.add_cellメソッドを使用してA1セルに’Hello, Excel!’という文字列を書き込んでいます。

このメソッドは、第一引数に行番号(0から始まる)、第二引数に列番号(0から始まる)、第三引数に書き込む値を取ります。

最後に、変更を反映させるためにファイルを再度保存しています。

このコードを実行後に’new_file.xlsx’を開くと、一番目のシートのA1セルに’Hello, Excel!’と書き込まれていることが確認できます。

○サンプルコード4:xlsxファイルへのデータ書き込み

次に、Rubyを使用してxlsxファイルに大量のデータを一度に書き込む方法を見ていきましょう。

下記のコードは、2次元配列のデータをxlsxファイルに書き込む例です。

require 'rubyXL'

# ファイルを読み込む
workbook = RubyXL::Parser.parse('new_file.xlsx')

# 一番目のシートを取得
worksheet = workbook[0]

# 書き込むデータ
data = [['Name', 'Age', 'City'], ['Alice', 20, 'Tokyo'], ['Bob', 30, 'Osaka'], ['Charlie', 25, 'Nagoya']]

# データを書き込む
data.each_with_index do |row, i|
  row.each_with_index do |cell, j|
    worksheet.add_cell(i, j, cell)
  end
end

# 編集した内容を保存
workbook.write('new_file.xlsx')

このコードでは、先ほどと同様にrubyXLライブラリを読み込み、’new_file.xlsx’を読み込んでいます。

そして、一番目のシートを取得しています。

次に、書き込むデータを2次元配列として定義しています。

そして、この配列を繰り返し処理で一つずつ取り出し、worksheet.add_cellメソッドを使用して各セルにデータを書き込んでいます。

最後に、編集した内容を保存しています。

このコードを実行すると、’new_file.xlsx’にデータが書き込まれます。

ファイルを開くと、一番目のシートにName, Age, Cityというヘッダーと共に各行にデータが書き込まれていることが確認できます。

○サンプルコード5:xlsxファイルからのデータ読み取り

次に、Rubyを使用してxlsxファイルからデータを読み取る方法を見ていきましょう。

下記のコードは、先ほど書き込んだデータを読み取る例です。

require 'rubyXL'

# ファイルを読み込む
workbook = RubyXL::Parser.parse('new_file.xlsx')

# 一番目のシートを取得
worksheet = workbook[0]

# 全ての行を読み込む
worksheet.each do |row|
  row && row.cells.each do |cell|
    val = cell && cell.value
    print "#{val}\t"
  end
  puts
end

このコードでは、先ほどと同様にrubyXLライブラリを読み込み、’new_file.xlsx’を読み込んでいます。

そして、一番目のシートを取得しています。

次に、worksheet.eachメソッドを使用して、シート内の全ての行を読み取っています。

それぞれの行に対して、行内の全てのセルを読み取り、その値を表示しています。

このコードを実行すると、コンソールにxlsxファイルの内容がタブ区切りで表示されます。

これにより、Rubyでxlsxファイルの読み取りが可能であることが確認できます。

●Rubyとxlsxファイル操作の応用例

ここまではRubyを用いてxlsxファイルを生成し、データを書き込み、読み取る基本的な操作について解説してきました。

次に、Rubyを使ったxlsxファイル操作の応用例を見ていきましょう。

ここでは、複数のシートを持つxlsxファイルの操作や、特定の条件に基づくデータの抽出といった操作を扱います。

○サンプルコード6:複数のシートを持つxlsxファイルの操作

xlsxファイルは、複数のシートを持つことができます。

それぞれのシートには異なる種類のデータを保存しておくことができるため、データの整理・分類に非常に便利です。

下記のコードは、Rubyを用いて複数のシートを持つxlsxファイルを操作する例です。

require 'rubyXL'

# 新規ワークブックを作成
workbook = RubyXL::Workbook.new

# 新規シートを追加
worksheet1 = workbook.add_worksheet('Sheet1')
worksheet2 = workbook.add_worksheet('Sheet2')

# データを追加
worksheet1.add_cell(0, 0, 'Sheet1 Data')
worksheet2.add_cell(0, 0, 'Sheet2 Data')

# ファイルに保存
workbook.write('multi_sheet.xlsx')

このコードではまず、RubyXL::Workbook.newメソッドを使用して新規のワークブックを作成しています。

そして、add_worksheetメソッドを使って新規のシートを2つ追加し、それぞれに異なるデータを書き込んでいます。

最後に、workbook.writeメソッドを使ってワークブックを’ multi_sheet.xlsx ‘という名前のxlsxファイルとして保存しています。

このコードを実行すると、’multi_sheet.xlsx’という名前のxlsxファイルが作成され、その中には2つのシートが存在します。

それぞれのシートには、それぞれ異なるデータが書き込まれています。

これにより、Rubyを使用して複数のシートを操作することが可能であることが確認できます。

○サンプルコード7:条件に基づくデータの抽出

データ分析を行う際には、特定の条件に基づいてデータを抽出することがよくあります。

Rubyでは、xlsxファイルから特定の条件を満たすデータだけを抽出することも可能です。

下記のコードは、年齢が30歳以上の人の名前を抽出する例です。

require 'rubyXL'

# ファイルを開く
workbook = RubyXL::Parser.parse('sample.xlsx')

# シートを選択
worksheet = workbook[0]

# 条件に合うデータを抽出
worksheet.each do |row|
  age = row[1].value.to_i # 2列目は年齢
  if age >= 30
    puts row[0].value # 1列目は名前
  end
end

このコードではまず、RubyXL::Parser.parseメソッドを使用してxlsxファイルを開いています。

そして、workbook[0]で最初のシートを選択しています。

次に、worksheet.eachメソッドを用いて各行について処理を行っています。

2列目のセルの値(年齢)が30以上である場合、1列目のセルの値(名前)を出力しています。

このコードを実行すると、年齢が30歳以上の人の名前がコンソールに表示されます。

これにより、Rubyを使用してxlsxファイルから条件に基づくデータの抽出が可能であることが確認できます。

●Rubyでxlsxファイルを操作する際の注意点と対処法

Rubyでxlsxファイルを操作する上で注意すべき点とその対処法をいくつか紹介します。

これらの情報は、スムーズにxlsxファイルの操作を行うための重要な知識となります。

1つ目の注意点は、xlsxファイルの扱いにはメモリが必要という点です。

特に大きなxlsxファイルを読み込む際や、大量のデータを書き込む際には、メモリを大量に消費します。

そのため、処理が遅くなる場合や、最悪の場合はプログラムがクラッシュすることもあります。

これを解決するためには、データを少しずつ読み込む、もしくは書き込む「ストリーミング」の技法を用いることが一つの方法となります。

また、不要なデータは可能な限り早く解放し、メモリの使用量を抑える工夫も有効です。

2つ目の注意点は、xlsxファイルのセルの値を取得する際、数値や日付などは特定の形式に変換されるという点です。

例えば、日付はUnixエポック(1970年1月1日)からの経過秒数として取得されます。

この挙動を改善するためには、適切な形式に変換するコードを書く必要があります。

RubyXLライブラリには、日付や時間を扱うためのヘルパーメソッドが提供されているので、これを活用しましょう。

3つ目の注意点は、RubyXLライブラリではxlsxファイルの全ての機能をサポートしていないという点です。

例えば、一部のスタイルや図形、マクロなどは扱えない場合があります。

この問題に対する具体的な対処法は、必要な機能に応じて別のライブラリを検討することです。

例えば、スタイルの複雑な操作や図形の描画が必要な場合は、axlsxやwrite_xlsxといったライブラリが適しています。

これらの注意点と対処法を理解しておくことで、Rubyを使ったxlsxファイルの操作がよりスムーズに行えるようになります。

まとめ

Rubyのライブラリを使うことで、Excelファイルの読み書きや編集が手軽に行えることを理解いただけたと思います。

また、Rubyでxlsxファイルを操作する際の注意点とその対処法も紹介しました。

これらの情報は、xlsxファイルの操作を行う上で重要な知識となります。

これからもRubyを活用したプログラミングを楽しみ、その可能性を追求していきましょう。

これらの知識が、あなたのコーディングスキルを一段と豊かにすることを願っています。