[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です。
- openFileDialog1
- lblPassword
- button1
- button2
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 = "失敗!"; } } } |
実行するとラベルに書き込みパスワードが表示されます。
▼ページトップへ