ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

今更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

広告を非表示にする