今更ruby勉強中

ruby

Javaのライブラリを知っているし、クロージャ定義も個人的にはしっくりくるためにGroovyの方が好きなのだが、どうにもJVMの起動の遅さにイライラすることがある。(Groovyservは置いていくとする)
まだしょぼしょぼのスクリプトしか組めないけどね。

会社でメモメモしたテキストをExcelに変換するスクリプトを組んでみた。以下のとおり。

#!/usr/bin/env ruby
# coding: UTF-8
require "rubygems"
require "win32ole_pp"
require 'nkf'
class String
def tosjis
NKF.nkf('-sxm0', self)
end
end
xls = WIN32OLE.new('Excel.Application')
fso = WIN32OLE.new('Scripting.FileSystemObject')
app = xls.application
app.screenUpdating = false
#WIN32OLE.const_load xls, self.class
book = xls.workbooks.add
begin
xlsfile = ARGV[-1]
ARGV[0..-2].sort.each_with_index do |txtfile, index|
sheet_index = index + 1
# 過剰なシートの削除
while book.worksheets.count > sheet_index
book.worksheets(sheet_index+1).delete()
end
if book.worksheets.count < sheet_index
sheet = book.worksheets.add({'After'=>book.worksheets(sheet_index-1)})
else
sheet = book.worksheets(sheet_index)
end
sheet.select
sheet.cells.columnWidth = 4.13
sheet.name = File.basename(txtfile).gsub(/.w+$/, "").tosjis
xls.activeWindow.displayGridlines = false
xls.activeWindow.zoom = 85
sheet.pageSetup.rightHeader = "&F"
sheet.pageSetup.centerHeader = "&A"
sheet.pageSetup.centerFooter = "&P / &N ページ".tosjis
i = 1
File.open(txtfile, "r") do |input|
while line = input.gets
cell = sheet.range("A" + i.to_s)
notabline = line.gsub(/n/u, "")
while notabline.include?("t")
notabline.gsub!(/^([^t]*)t/u){
#$1 + (" " * (4 - $1.length%4))
$1 + (" " * (4 - $1.tosjis.length%4))
}
end
if notabline =~ /[.+s*参照]/
imgFileMs = fso.getAbsolutePathName(notabline.gsub(/^s*[|参照]s*/, "").tosjis)
img = sheet.pictures.insert(imgFileMs)
c = sheet.range("A" + i.to_s)
img.top = i * c.height
img.left = 3 * c.width
i += 2 + (img.height / c.height).to_i
else
cell.value = notabline.tosjis
font = cell.font
font.name = "MS ゴシック".tosjis
if line =~ /^s*$/
font.bold = true
font.size = 13
elsif line =~ /^s**/
font.size = 12
end
end
i += 1
end
end
# 改ページ
sheet.pageSetup.printArea = "$A$1:$y$#{i}"
xls.activeWindow.view = 2
sheet.vPageBreaks(1).location = sheet.range("y1")
sheet.pageSetup.printArea = "$A$1:$x$#{i}"
xls.activeWindow.view = 1
end
book.worksheets(1).activate
book.readOnlyRecommended = true
# Titile
book.builtinDocumentProperties(1).value = File.basename(xlsfile).gsub(/.w+$/, "").tosjis
# Sub Titile
book.builtinDocumentProperties(2).value = ""
# 作成者
book.builtinDocumentProperties(3).value = "!!ここは社名".tosjis
# 最終更新者
book.builtinDocumentProperties(7).value = "!!ここは社名".tosjis
# 管理者
book.builtinDocumentProperties(20).value = ""
# 会社名
book.builtinDocumentProperties(21).value = "!!ここは社名".tosjis
app.displayAlerts = false
book.saveAs fso.getAbsolutePathName(xlsfile.tosjis)
app.displayAlerts = true
ensure
book.close
app.screenUpdating = true
xls.quit
end

非常に簡単。以下のようなテキストファイルをほんの少しそれっぽいエクセルにしてくれます。画像も貼り付けてくれます。(Wordで出力したほうがいいって?職場では基本Excel提出なのです。Excelが好きな会社なのです。)

$ サブタイトル
* こんなことがあったよ。
- カフェオレ飲みすぎて今月のお小遣い10000円が20日でなくなった
- ちょっと甘いもののみすぎで腹が出てきた気がする(以下がその画像だお)
[0001.jpg 参照]
* こんな失敗
- 基本設計でUI方式をドキュメント化したら「これは詳細設計で作成するものでしょ?間違ってるよ」と指摘された

と思ってこのエントリ書いていたら!

Groovyserv 0.2 がリリースされているし!!!!!嬉しい!!!またGroovyにべったりになるやん。
Welcome! — GroovyServ documentation

ruby