:note

rubyXLでxlsxの編集生成

rubyで xls, xlsx の編集、新規作成するとき、内容によってgemを

  • zdavatz/spreadsheet -> xlsの読み込み、xlsの書き出し
  • randym/axlsx -> xlsxの読み込みはできない、xlsxの書き出し
  • hmcgowan/roo -> xlsxの読み込みが必要なとき、しぶしぶ読み込みだけに使用

と使い分けていた

Open xlsx raise an Ole::Storage::FormatError · Issue #77 · zdavatz/spreadsheet に紹介されてた

xlsxの読み込み、xlsxの書き出しができる weshatheleopard/rubyXL を試してみた

require "rubyXL"

# 新規でxlsxを作成
workbook = RubyXL::Workbook.new
worksheet = workbook.worksheets[0]
cell = worksheet[0]
p cell # => nil

m = [
  %w[A1 B1 C1 D1 E1 F1 G1],
  %w[A2 B2 C2 D2 E2 F2 G2],
  %w[A3 B3 C3 D3 E3 F3 G3],
  %w[A4 B4 C4 D4 E4 F4 G4],
  %w[A5 B5 C5 D5 E5 F5 G5]
]

m.first.size.times do |r|
  m.size.times do |c|
    worksheet.add_cell(r, c, m[c][r])
  end
end

cell = worksheet[0][0]

p cell # => #<RubyXL::Cell(0,0): "A1", datatype = str, style_index = 0>
p cell.is_struckthrough
# うち消し線
cell.change_font_strikethrough true
p cell.is_struckthrough

p cell.font_name
# フォントの変更
cell.change_font_name "Ricty"
p cell.font_name

p cell.font_size
# フォントサイズの変更
cell.change_font_size 32 # cellの高さまではかわらない
p cell.font_size
p cell.font_color
p cell.fill_color
p cell.horizontal_alignment
p cell.vertical_alignment

# get_border_bottom は Deprecated
p cell.get_border(:bottom)

# [0,0]セルの下枠を medium
cell.change_border(:bottom, :medium)
# 2行目の下枠を thick
worksheet.change_row_border(1, :bottom, :thick)

workbook.write(File.expand_path "~/Desktop/file.xlsx")

puts "="*32

# 既存のxlsxを読み込みする
workbook = RubyXL::Parser.parse(File.expand_path "~/Desktop/file.xlsx")
worksheet = workbook.worksheets[0]
cell = worksheet[0][0]

p cell # => #<RubyXL::Cell(0,0): "A1", datatype = str, style_index = 4>
p cell.is_struckthrough

p cell.font_name

p cell.font_size

p cell.font_color
p cell.fill_color
p cell.horizontal_alignment
p cell.vertical_alignment

p cell.get_border(:bottom) 
p worksheet.get_row_border(1, :bottom) 

ちょっといじってみた感じ、わりとシンプル

xlsx を axlsx をつかうほど複雑につくりこみしないならいいかも

 
comments powered by Disqus
back to top