none
Wordファイルのパスワード有無確認方法について RRS feed

  • 質問

  • マイクロソフト・コミュニティの方で質問したところ、こちらでの質問が良いということで質問させて頂きます。

    弊社ではファイルサーバに保存した一定のファイルに対して、パスワードを設定するという社内ルールがあります。
     このため、ExcelファイルやWordファイルにもパスワードを設定するのですが、定期的な社内検査でそれらのファイルに対してパスワードが設定されているか確認を行っています。現状は検査担当者が、それらひとつひとつのファイルに対してWクリックを行い、パスワードが設定されているか確認しているのですが、マニュアル作業につき膨大な作業量になっています。


     これをプログラムを使って確認出来ないかということで、インターネット検索でヒントを拾いつつ作ってみました。
     Excelファイルはファイルを開かなくてもVBAでパスワード設定有無を確認出来たのですが、Wordの方はVBAでは作れそうもなかったのでVBで(Document.HasPasswordプロパティを使用して)作りました。しかし、結果的にWordのファイルをオープンしないと(パスワードを返答しないと)正しいプロパティ値(文書を開く場合にパスワードが必要な場合は true、それ以外の場合は false)が返って来ませんでした。

     ここで質問です(インターネット検索すると同様の質問がありますが、回答が無かったのでこちらで質問させて頂きます)。
     Wordファイルをオープンしないで正しいプロパティ値を受け取る方法はありますでしょうか。または、Document.HasPasswordプロパティ以外でも結構ですので、Wordファイルを開かずにパスワード設定有無を判断する方法はありませんでしょうか。

    2014年2月17日 7:22

回答

  • > Wordファイルをオープンしないで正しいプロパティ値を受け取る方法はありますでしょうか。

    サードパーティー製品を使う方法があります。有償でよければ、以下のコンポーネントが使えそうです。

    Aspose.Words for .NET

    システムにWordがインストールされてなくても、インメモリ(ドキュメントを画面で開かずに)でドキュメントの解析・操作ができるようですね。COM経由でアクセスするより遥かに高速な処理が期待できそうです。

    ちなみにこの手の製品は高額に思われがちなのですが、実際の開発にかかる工数を考慮すると、サードパーティー製品を使った方が遥かに安上がりに済むケースが多いです。

    ひらぽん http://d.hatena.ne.jp/hilapon/



    2014年2月17日 8:06
    モデレータ

すべての返信

  • > Wordファイルをオープンしないで正しいプロパティ値を受け取る方法はありますでしょうか。

    サードパーティー製品を使う方法があります。有償でよければ、以下のコンポーネントが使えそうです。

    Aspose.Words for .NET

    システムにWordがインストールされてなくても、インメモリ(ドキュメントを画面で開かずに)でドキュメントの解析・操作ができるようですね。COM経由でアクセスするより遥かに高速な処理が期待できそうです。

    ちなみにこの手の製品は高額に思われがちなのですが、実際の開発にかかる工数を考慮すると、サードパーティー製品を使った方が遥かに安上がりに済むケースが多いです。

    ひらぽん http://d.hatena.ne.jp/hilapon/



    2014年2月17日 8:06
    モデレータ
  • もし採用しているファイルフォーマットが .docx / .xlsx であればZIP圧縮されたXMLですのでパスワードが存在する=暗号化されているの判断は簡単です。自前でXMLを解析することもできますし、Open XML SDKを使ってアクセスすることもできます。

    ちなみに「Wordファイルを開かずに」とは「Wordプログラムで開かずに」でありファイル自身を開くことは認められるんですよね? 開かないと内容が確認できないため自明ではありますが、文字通りであれば開けられないので。

    2014年2月17日 13:00
  • ご回答ありがとうございます。ご紹介いただいた製品を確認してみたいと思います。
    2014年2月17日 23:56
  • ご回答ありがとうございました。

    > ファイル自身を開くことは認められるんですよね?

    開くこと自体はOKです。自分で作ったプログラム(Document.HasPasswordプロパティを使用)はファイルをオープンしないとプロパティ値が返って来ない上に、ファイルオープンするとパスワード入力画面が出力されてしまい、返答しないとプログラムがWaitしたまま、更には正しいパスワードを返答しないと(キャンセルしても)正しいプロパティ値が返ってこないという結果です。
    これではマニュアルで検査しているのと同じですし、パスワード設定ありの前提なのでプログラムを起動したPCでは次から次へとパスワード入力画面が出力される悲惨な状況となります。
    といった状況なので、「Wordプログラムで開かずに」パスワード設定有無を確認したかった訳です。
    ご紹介いただいたOpen XML SDKは全く知識がありませんが、少しお勉強してみたいと思います。

    2014年2月18日 0:23