3

ハードドライブ上の多くのフォルダに約数千のExcel(xls、古い形式)ファイルが分散しています。これらのファイルには、データベースに接続するのと同じマクロがあります。また、マクロには接続文字列が含まれています。マクロはパスワードで保護されていますが、幸いなことに私はパスワードを知っています。

質問:すべてのファイル内のマクロの接続文字列を変更するための最良の方法は何ですか?

NPOIを使用してxlsファイルを作成/変更した経験があります。Interopライブラリがパスワードで保護されたWordファイルのロックを解除し、編集を行っているのを見てきました。しかし、Excelファイル内のマクロテキストをプログラムで変更する例を見たことがありません。それも可能ですか?

psコードの記述に問題はありません。問題は、適切なツールを選択することです。

4

1 に答える 1

4

次のコードを開始点として使用することをお勧めします。このコードは、COM相互運用機能を使用してVBAスクリプトを抽出し、検索-置換を実行します。非常に基本的なスクリプトを使用して、パスワードで保護されたスプレッドシートでこれを試してみましたが、うまくいきました。確かに基本的なことですが、必要なものを抽出できる場合があります。

string filename = "Test.xls";
string password = "password";

Excel._Application app = new Excel.Application();
Excel._Workbook workbook = app.Workbooks.Open(Filename: filename, Password: password);

if (workbook.HasVBProject)
{
    VBProject project = workbook.VBProject;

    foreach (VBComponent component in project.VBComponents)
    {
        if (component.Type == vbext_ComponentType.vbext_ct_StdModule ||
            component.Type == vbext_ComponentType.vbext_ct_ClassModule)
        {
            CodeModule module = component.CodeModule;

            string[] lines =
                module.get_Lines(1, module.CountOfLines).Split(
                    new string[] { "\r\n" },
                    StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i].Contains("A1"))
                {
                    lines[i] = lines[i].Replace("A1", "D1");
                    module.ReplaceLine(i + 1, lines[i]);
                }
            }
        }
    }
}

workbook.Save();
workbook.Close();
app.Quit();
于 2013-01-25T02:19:10.707 に答える