色々な例

シートの全選択
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