仕事等で、大量にある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行くらいに収まりそうです。