3

我有大约数千个 Excel(xls,旧格式)文件分布在硬盘驱动器上的许多文件夹中。这些文件具有连接到数据库的相同宏。并且宏包含连接字符串。宏受密码保护,但幸运的是我知道密码。

问题:在所有文件中的宏中更改连接字符串的最佳方法是什么?

我有使用NPOI创建/修改 xls 文件的经验。我见过互操作库解锁受密码保护的 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 回答