[VC2005] パスワードがわからない保護されたExcelワークブックを開く方法

◆概要

この資料は、Microsoft(R) Visual C#で パスワードがわからない保護されたExcelワークブックを開く方法について記述しています。Visual Studio 2005/2010で動作確認しています。

次の例では、1000から2000の数字パスワードを代入し、パスワードが一致した時点でlblPasswordにパスワードを表示します。
この例では、読み取りパスワードが"1111"であることが分かっている場合、書き込みパスワードを検索します。読み取りパスワードと書き込みパスワードが同じであると分かっているときは、try区の中のstrReadPassをstrPassにすればよいでしょう。

◆前準備

[プロジェクト]-[参照の追加]で表示される、「参照の追加」ダイアログボックスで、[COM]タブを選び、Microsoft Excel xx.x Object Library を選択し、[選択]ボタンを押して「OK」ボタンを押します。
 xx.xの部分は使用しているExcelのバージョンです。例えば、Excel2010なら 14.0です。

◆フォームに配置するもの
  1. openFileDialog1
  2. lblPassword
  3. button1
  4. button2
◆using区に次のコードを追加する
using System.Text.RegularExpressions;
    


◆Sample code


private void button1_Click(object sender, EventArgs e)
        {
            string strPass;//読み取りパスワードを格納する変数
              string strReadPass = "1111";
            string strFileName = "C:\\test.xl";

            // 最初に表示されるディレクトリ
              openFileDialog1.InitialDirectory = "C:\\";

            //「ファイルの種類」を指定
              openFileDialog1.Filter = "Microsoft Excelファイル(*xls)|*.xls";

            //既定のファイル名
              openFileDialog1.FileName = "test.xls";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //ユーザーが選択したファイル名を変数stFileNameに代入
                  strFileName = openFileDialog1.FileName;
            }
            else
            {
              //キャンセルボタンが押されたら、処理を抜ける
                MessageBox.Show("キャンセルされました", "ファイルの選択",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

          // Excelのインスタンスを作成
            Excel.Application app;
            app = new Excel.Application();

          //Excelを表示
            app.Visible = true;

          //1000から2000までパスワードを代入し、パスワードが合致して
            //該当のエクセルブックが開いたら処理を抜け
            //lblPasswordにパスワードを表示する
            for (int N = 1000; N <= 2000; N++)
            {
                strPass = N.ToString();

                //パスワードで保護されたExcelワークブックを開く
                try
                {
                    Excel.Workbook workbook =
                         app.Workbooks.Open(
                         strFileName,
                         Type.Missing, Type.Missing, Type.Missing,
                         strPass, strReadPass, Type.Missing,
                         Type.Missing, Type.Missing, Type.Missing,
                         Type.Missing, Type.Missing, Type.Missing,
                         Type.Missing, Type.Missing);

                  //lblPasswordのテキストに変数stPassの文字列を代入
                    lblPassword.Text = strPass.ToString();

                  //指定文字列の有無を判定
                    if (Regex.IsMatch(strPass, "password"))
                    {
                        //lblPasswordが初期値[password]のときは処理を継続
                    }
                    else
                    {
                    //lblPasswordが初期値[password]と違う時は
                        //Excelが開いた時なので、処理を抜ける
                        break;
                    }

                }
                catch
                {
                  //失敗したときは、lblPasswordに「失敗!」と表示
                    lblPassword.Text = "失敗!";
                }
            }           
        }

 実行するとラベルに書き込みパスワードが表示されます。

▼ページトップへ