mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - Excel ファイル読み書き!

[ プログラミング ] [ Excel, Ruby ]

こんばんは。

プライベートで表計算ソフト Excel を使用することはなくなりました。(業務ではやむを得ず使用しますが)

しかし、重要なデータの提供が xsl ファイルのみのことがあるので、 処理(CSV データ生成や DB Insert スクリプト等の生成)を容易にするために Ruby で読みこむようにしている。
VB や VBA が扱いにくいということはないのですが、 Ruby を使うようになってからは Ruby で処理を行う方が断然容易で扱いやすいのです。(個人的には)

以下は、基本的な使用例です。

0. 前提条件

  • Linux Mint 13(64bit) での作業を想定。
  • Ruby 2.1.0-p0
  • “Spreadsheet” という RubyGem パッケージを使用する。
    • Excel のワークブックは読み書きできる。
    • OpenOffice や LibreOffice のワークブックは読み書きできない。

1. Spreadsheet パッケージインストール

“Spreadsheet” という RubyGem パッケージがインストールされていなければインストールする。

1
$ gem install spreadsheet

2. Ruby スクリプト作成例(読み込み用)

read_excel.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require 'spreadsheet'

XLS = "./test.xls"

class ReadExcel
  # 読み込み
  def read
    begin
      # Excelファイルを読み込み
      wb = Spreadsheet.open(XLS, 'r')

      # シート名を指定してシートを取得
      # (インデックスで指定することも可能)
      ws = wb.worksheet("Test")
      #ws = @wb.worksheet(0)

      # 行の値を配列で取得
      row = ws.row(3)  # <= 4行目

      # 全ての行を配列で取得
      row = ws.rows

      # 行・列を指定して取得
      cell = ws[14, 4]  # <= 15行, 5列目
    rescue => e
      puts "[#{e.class}] #{e.message}"
      exit 1
    end
  end
end

ReadExcel.new.read

3. Ruby スクリプト作成例(書き込み用)

write_excel.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
require 'spreadsheet'

XLS = "./test_2.xls"

class WriteExcel
  # 書き込み
  def write
    begin
      # ワークブック生成
      wb = Spreadsheet::Workbook.new

      # ワークシート生成
      ws = wb.create_worksheet(:name => 'TEST')

      # 行, 列を指定して書き込み
      ws[2, 3] = "Hello!"  # <= 3行,4列目

      # 配列でまとめて行を書き込む
      ws.row(4).replace ["5行-1列", "5行-2列", "5行-3列"]  # <= 5行目

      # 名前を付けてワークブック保存
      wb.write(XLS)
    rescue => e
      puts "[#{e.class}] #{e.message}"
      exit 1
    end
  end
end

WriteExcel.new.write

4. 参考サイト


以上。

Comments