テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

rubyでxlsxファイル出力

2016-05-10 16:14:50 | Ruby, Rails,プログラミング
rubyでExcelで読めるファイルを出力するのにCSVだとちとまずいのでxlsxファイルが出力できるというaxlsxというのをgemでインストール。
最初はrooというのがいいのかと思ってたら、Excelファイル出力には使えないそうだ。

それでやりたいのはセルの色とセル内改行と計算式とシートの追加。
以下のスクリプトでOKだった。
(※ubuntu上のlibreoffice)

require 'axlsx'

package = Axlsx::Package.new

ws1 = package.workbook.add_worksheet(name: 'Example')
ws2 = package.workbook.add_worksheet(name: 'Ex2')
ws1.add_row([100,200,'=A1+B1'])
ws1.add_row(['this','is', 'pen'])
cellcolor = ws1.styles.add_style(:bg_color => '005555', :fg_color => 'FFFFFF', :sz => 14, :alignment => { :horizontal=> :center })
ws1.add_row(['Hello', 'World'], style: cellcolor)
ws2.add_row(["Hello\nWorld"], height: 30)

package.serialize('example.xlsx')

これで良しと思ったらruby1.8.7でaxlsxがインストールできなかった。
なのでイマイチだがspreadsheetに変更。注:xlsxでなくxlsファイルになる。

require 'spreadsheet'

# Spreadsheet.client_encoding = 'UTF-8'

# 新規作成
book = Spreadsheet::Workbook.new
ws1 = book.create_worksheet :name => 'Example'
ws2 = book.create_worksheet :name => 'Ex2'

bgcolor = Spreadsheet::Format.new :pattern_fg_color => :yellow, :pattern => 1
ws1.row(0).concat %w{abc xyz 漢字}
ws1.row(0).default_format = bgcolor

format = Spreadsheet::Format.new :color => :blue
ws1[1,0] = 100
ws1[1,1] = 200
ws1[1,2] = '=B2+C2'
ws1[1,3] = "=B2+C2"
ws1.row(1).default_format = format

ws1[2,0] = "Hello\nWorld"
ws1.row(2).height=24

book.write('example.xls')

計算式は使えなかったが、シートと改行とカラーができたんでまあいいか。
ruby1.8.7はcsvも1.9版の元になったというfastcsvにしなきゃ行けなかったり、往生しまっせ。

と思ったらWriteExcelというのがあった。出力のみだったが、それでいいので結局これにしようか。
fmt = workbook.add_format(
:bg_color => 'pink',
:pattern => 1
)
ws.set_row(0,24) # height
ws.write_row(0,0,["mag\ngie", 'milly', 'molly', 'may'],fmt)
ws.write(1,0,000012,fmt)
こんな感じで使えたし。

最新の画像もっと見る

コメントを投稿