色々な例
シートの全選択
sheet.Cells.Select
シートの全削除
sheet.Cells.ClearContents
セルが空かどうかチェック
cell = sheet.Cells.Item(y,x) unless cell.Value.nil? # セルに何かデータがある puts cell.Value end
Rangeを使用してセルの値を取得する
# 単一セル cell = sheet.Range("A1") puts cell.Value # 範囲選択 cells = sheet.Range("A1:C3") cells.Value.each{|row| row.each{|cell| puts cell.Value } } # 範囲選択(R1C1形式) cells = sheet.Range( sheet.Cells(1,1), sheet.Cells(5,3) ) # => A1:C5と同義 # 2行目のみ cells = sheet.Rows(2) # 3行目〜5行目全体 cells = sheet.Rows("3:5") # 1列目のみ cells = sheet.Columns(1) # 2列目〜5列目全体 cells = sheet.Range( sheet.Columns(2), sheet.Columns(5) ) # ※Office2007以降は列の制限が大幅に増えてるので、列全体指定はすごく時間がかかってしまうので注意
セルにデータをセットする
以下のようなデータを登録しておく
- A1に日付
- A2に数値
- A3に文字列
- A4にtrue
- A5にfalse
- A6は空っぽ
- A7に計算式(=A2+123)
- A8に0除算計算式(=0/0)
- A9に計算できない計算式(="ABC"+123)
sheet.Range("A1").Value = Time.now sheet.Range("A2").Value = 123 sheet.Range("A3").Value = "hoge" sheet.Range("A4").Value = true sheet.Range("A5").Value = false sheet.Range("A6").Value = "" # nil でも同じ sheet.Range("A7").Formula = "=A2+1" # Value= でもいいのだけど、より式を登録するというのがわかりやすいので sheet.Range("A8").Formula = "=0/0" sheet.Range("A9").Formula = '="ABC"+123' # 複数のセルに一発でセットもできる(大量にデータ登録する時はこれじゃないと遅くてやってられない) # 1行だけの場合は単なる配列でもOK sheet.Range("B1:E1").Value = ["B1", "C1", "D1", "E1"] # 2行以上の場合は配列の配列 sheet.Range("B2:D3").Value = [ ["B2", "C2", "D2"], [32, 33, 34] ]
セルのデータ型を調べる
上記で登録したデータを取得してみる
# 日時、数値、文字列の3つだけ?=>Bool、Bignum もあった # Rangeが範囲選択の場合は列データの配列の配列となる sheet.Range("A1").Value.class # => Time => 2013-10-31 14:06:22 +0900 sheet.Range("A2").Value.class # => Float => 123.0 sheet.Range("A3").Value.class # => String => "hoge" sheet.Range("A4").Value.class # => TrueClass sheet.Range("A5").Value.class # => FalseClass sheet.Range("A6").Value.class # => NilClass sheet.Range("A7").Value.class # => Float => 124.0 sheet.Range("A7").Formula # => '=A2+1' sheet.Range("A8").Value.class # => Bignum => -2146826281 sheet.Range("A8").Formula # => '=0/0' sheet.Range("A9").Value.class # => Bignum => -2146826273 sheet.Range("A9").Formula # => '="ABC"+123' sheet.Range("B1:E1").Value.class # => Array => [["B1", "C1", "D1", "E1"]] sheet.Range("B2:D3").Value.class # => Array => [["B2", "C2", "D2"], [32.0, 33.0, 34.0]] # 式がエラーの場合は Bignum となるみたい。ちゃんとエラーかどうか調べるには以下のようにする xl.IsError( sheet.Range("A1") ) # => false xl.IsError( sheet.Range("A8") ) # => true