Application.FileSearch代わりにFileSystemObjectでExcelファイル検索

2012年4月10日火曜日

開発

t f B! P L C
ネコ好き電脳ガジェットクラスタなプログラマー ムチャ(@mutoj_rdm812)です。

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

▼ブログを気に入っていただけたらRSS登録をお願いします!
▼ブログランキング参加中!応援よろしくお願いします。

ブログ内検索

自己紹介

猫とガジェットが好きなJava屋さんです。うつ病で休職後退職し、1年半の休養後に社会復帰。・・・が、いろいろあって再び退職。さらに1年休職の後に復帰して、なんとかSE続けてます。茶トラのすずと一緒に生活していましたが、2014年9月4日に亡くなって1人に。

より詳細なプロフィールはこちら↓

↓更新情報を受け取るにはフォローをお願いします!

Instagramでフォロー

※ヘッダー及びアイコンで使用しているドロイド君は、googleが作成、提供しているコンテンツをベースに複製したものです。

▼ココナラでメンターサービスを販売しています。招待コード「C3VG3」で1000ポイントもらえます。
▼欲しい物リスト

ブログ アーカイブ

QooQ