仕事等で、大量にあるExcelファイルから指定の文字列を含む物を探したいという事が
ありませんか?
特に図形オブジェクト(オートシェイプ)の文字列を検索したい場合、
開いても検索ができないので大変です。
以前の職場では、ソフトを自由に入れることができませんでした。
インターネットとも接続されていません。
可能であれば、Namazuをインストールして検索するのが高速だし便利なんですが。
そこで、プログラムを書くことにしました。
後々同じようなプロジェクトに配属になったときのことを考え、
印刷できるHTMLファイルで作ることにしました。
そうやって作った当時はOffice2003の環境で動いていたのですが、
今改めて自分のPCで実行してみると、Office2010では動きません。
調べてみると、Excelで開けるファイルを指定ディレクトリ内から検索する、
「Application.FileSearchオブジェクト」がOffice2007以降使えなくなっていることが分かりました。
なんて変更をしてくれるんだマイクロソフトよ・・・。
仕方が無いので、FileSystemObjectを使って指定ディレクトリ内のファイルをリストアップするコードに変更しました。
コードはVBでなく、JavaScriptで書いてます。
こっちの方が書きやすいんです・・・。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var files = new Array();//ファイル名を格納する配列
searchFolders(fso.getFolder(path));//pathは指定したディレクトリ名
:
:
function searchFolders(topfolder){
var e = new Enumerator(topfolder.SubFolders);
for(;!e.atEnd(); e.moveNext()){
var folder = e.item();
searchFolders(folder);
}
e = new Enumerator(topfolder.Files);
for(;!e.atEnd(); e.moveNext()){
var filename = e.item().Path;
if(filename.match(/\.xls$/i)){
files.push(filename);
}
}
}FileSystemObjectを生成し、指定したパスのFoldersコレクションを取得して開始です。
Enumratorクラスを使って、サブフォルダーとファイルを取得します。
サブフォルダーがあった場合、そのフォルダーをトップとして再び同じ関数を呼び出します。
こうすることにより、フォルダ構造を順にたどりながら、拡張子.xlsのファイルだけをfiles配列に格納します。
これでExcelファイルのリスト化ができるようになりました。
このツールはまたameroadで公開しようかと思います。
行数は380行くらいに収まりそうです。

