今回実務で扱ったRubyonRailのGemRoo
についてまとめました。
ソースコード: https://github.com/roo-rb/roo
今回の投稿の続きはこちらです。
→Roo / Ruby on Rails Gem 日本語訳(2)
投稿動機
→実務で扱ったGemを復習する
→Githubなどのソースコードにビビらないようになりたい
→将来実務で英語を使いたいので、そのポートフォリオの一環として作成したい
また、最後にも記載しますが著作権に関して疎いので、この記事が著作権違反にあたらないと認識して投稿しています。
なので、著作権を侵害するつもりもありませんし、もし著作権違反になるようであればすぐにこの投稿を削除します。
I will mention at the end, I am not familiar with copyright, so I am posting this article recognizing that it does not violate copyright.
So I don't intend to infringe copyright, and if it does, I'll delete this post immediately.
Roo
Rooは一般的なスプレッドシートに対して使用できます。
・Excelファイル 2007 - 2013(xlsx, xlsm)
・LibreOffice / OpenOffice.org ファイル (ods)
・CSVファイル
Excelファイル 97, Excelファイル 2002 XML, Excelファイル 2003 XMLの場合
→roo-xls(xls, xml)
グーグルスプレッドシートの読み書きする場合
→roo-google
インストール
Gemをインストールするには,
$ gem install roo
もしくは、Gemfile
に追加してください。
gem "roo", "~> 2.8.0"
使い方
スプレッドシートを開きます
require 'roo'
xlsx = Roo::Spreadsheet.open('./new_prices.xlsx')
xlsx = Roo::Excelx.new("./new_prices.xlsx")
#扱うスプレッドシートが曖昧な場合`extension:`を使いましょう
xlsx = Roo::Spreadsheet.open('./rails_temp_upload', extension: :xlsx)
xlsx.info
# => スプレッドシートのデータが帰ってきます
Roo::Spreadsheet.open
ではパスでもファイルの名前でもどちらでも使えます。
シートの操作
ods.sheets
# => ['Info', 'Sheet 2', 'Sheet 3'] # シート内にある配列
ods.sheet('Info').row(1)
ods.sheet(0).row(1)
# `ods.default_sheet`に配列の最後を入れる場合
ods.default_sheet = ods.sheets.last
ods.default_sheet = ods.sheets[2]
ods.default_sheet = 'Sheet 3'
# each文を使って繰り返し処理をする場合
ods.each_with_pagename do |name, sheet|
p sheet.row(1)
end
rows
やcolumns
にアクセス
Roo
はエクセルの列や行に番号をつけて使います。
なので、1
が最初のインデックスで、配列のように0
ではありません
sheet.row(1)
# シートの最初の行(row)が帰ってきます。
sheet.column(1)
# シートの最初の列(columun)が帰ってきます。
ほとんどのメソッドがシートの引数を用いています。
もしパラメーターを省略するなら、下記のように便利なメソッドを使用します。
sheet.first_row(sheet.sheets[0])
# => 1 # 1番目の行
sheet.last_row
# => 42 # 最後の行
sheet.first_column
# => 1 # 最初の列
sheet.last_column
# => 10 # 最後の列
cell
にアクセス
下記の方法でシートの一番左上のcell
にアクセスできます。
sheet.cell(1,1)
sheet.cell('A',1)
sheet.cell(1,'A')
sheet.a1
今回はここまでです。
続きはこちらです。
→Roo / Ruby on Rails Gem 日本語訳(2)
最後に
著作権に関して疎いので、この記事が著作権違反にあたらないと認識して投稿しています。
なので、著作権を侵害するつもりもありませんし、もし著作権違反になるようであればすぐにこの投稿を削除します。
I am not familiar with copyright, so I am posting this article recognizing that it does not violate copyright.
So I don't intend to infringe copyright, and if it does, I'll delete this post immediately.