« 買い時はむずかしい | トップページ | 住民票問題の本質 »

Ruby で Excel を grep その2

 試行錯誤のうえなんとか動くようになったので、公開。下の「 xlsgrep.rb 」がそのスクリプト。
 Ruby をインストールした上で、コマンドラインから、

 C>ruby xlsgrep.rb ruby *.xls

 などとすると、xls ファイルの各シートにわたって「ruby」という文字を検索し、見つかれば行単位で表示する。

 ただし、Windows 2000、Excel 97 SR-1、Ruby 1.8.1 という環境でしか確認していないので、異なる場合には念のため注意を。
 今年になって Ruby を始め、はじめてつくったスクリプトなので冗長なところとか無駄なところがあるかもしれないけれど、初心者ということでご容赦を。

 ≫捕捉説明はこっち

≫つらつらぐさ: Ruby で Excel を grep
≫つらつらぐさ: xlsgrep の捕捉(いまさら)
≫つらつらぐさ: excel ファイルを grep する(3)

追記:2008/6/30
 検索するエクセルファイルをフルパスで指定しないとならないところなどを修正。

追記:2008/7/10
 一応 Ruby 1.9.0 でも動くようにしてみた。


追記:2014/07/29
 Excel2007 以降の xlsx ファイルを検索するのであれば、こちらをご参照ください。


xlsgrep.rb



#!ruby -Ks
# Ruby で Excel ファイルを grep する
# 2004/05/13 , 2004/05/18
require 'win32ole'
require 'fileutils'
$KCODE = "SJIS"
def usage
print "usage: ruby xlsgrep.rb <検索文字列> files...\n"
exit(1)
end
#
usage if ARGV.size < 2
pat = Regexp.new(ARGV.shift, Regexp::IGNORECASE, "SJIS")
rtemp = "c:/rtemp/"
FileUtils.rm_r(rtemp) if File.exist?(rtemp)
Dir.mkdir(rtemp)
#
module EXCEL_CONST
end
#
excel = WIN32OLE.new('Excel.Application')
excel.visible = true if $DEBUG
WIN32OLE.const_load excel, EXCEL_CONST
cdir = Dir.pwd
#
ARGV.each do |xls|
xls = File.expand_path(xls)
#
begin
print "file:#{xls}\n"
book = excel.workbooks.open xls
sc = book.worksheets.count
i = 1
while i < sc + 1
sheet = book.worksheets(i)
sheet.select
s_name = sheet.name
book.saveas rtemp + "#{s_name}.txt" , EXCEL_CONST::XlText
book.saved = true
i = i + 1
end
book.close
#
Dir.chdir(rtemp)
Dir.foreach(rtemp) do |f|
if File.fnmatch("*.txt", f)
lc = 1
File.foreach(f) do |line|
s_name = File.basename(f,".txt")
if line =~ pat
print " sheet:#{s_name} line:#{lc}\n"
print line
end
lc = lc + 1
end
end
end
print "\n"
#
Dir.foreach(rtemp) do |f|
if f =~ /\.txt/
File.delete(f)
end
end
Dir.chdir(cdir)
end
#
end
#
Dir.chdir("#{rtemp}/..")
FileUtils.rm_r(rtemp)
#
excel.quit

|

« 買い時はむずかしい | トップページ | 住民票問題の本質 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Ruby で Excel を grep その2:

» xlsgrepをほんの少しだけ修正 [つらつらぐさ]
 エクセルファイルを grep するスクリプトを久しぶりにほんの少しだけ修正。たまにしか使わないというのに、検索するエクセルファイルをフルパ [続きを読む]

受信: 2008.06.30 17:11

« 買い時はむずかしい | トップページ | 住民票問題の本質 »