今更ruby勉強中
Javaのライブラリを知っているし、クロージャ定義も個人的にはしっくりくるためにGroovyの方が好きなのだが、どうにもJVMの起動の遅さにイライラすることがある。(Groovyservは置いていくとする)
まだしょぼしょぼのスクリプトしか組めないけどね。
会社でメモメモしたテキストをExcelに変換するスクリプトを組んでみた。以下のとおり。
#!/usr/bin/env ruby# coding: UTF-8require"rubygems"require"win32ole_pp"require'nkf'classStringdeftosjisNKF.nkf('-sxm0', self) endend 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() endif 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 = 1File.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)) } endif 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 = 13elsif line =~ /^s**/ font.size = 12endend i += 1endend# 改ページ 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 = 1end 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 = trueensure book.close app.screenUpdating = true xls.quit end
非常に簡単。以下のようなテキストファイルをほんの少しそれっぽいエクセルにしてくれます。画像も貼り付けてくれます。(Wordで出力したほうがいいって?職場では基本Excel提出なのです。Excelが好きな会社なのです。)
$ サブタイトル * こんなことがあったよ。 - カフェオレ飲みすぎて今月のお小遣い10000円が20日でなくなった - ちょっと甘いもののみすぎで腹が出てきた気がする(以下がその画像だお) [0001.jpg 参照] * こんな失敗 - 基本設計でUI方式をドキュメント化したら「これは詳細設計で作成するものでしょ?間違ってるよ」と指摘された
と思ってこのエントリ書いていたら!
Groovyserv 0.2 がリリースされているし!!!!!嬉しい!!!またGroovyにべったりになるやん。
Welcome! — GroovyServ documentation
ディスカッション
コメント一覧
まだ、コメントがありません