以编程方式更改Excel中的macros文本

我已经有大约数千个Excel(xls,旧格式)文件分布在硬盘上的许多文件夹中。 这些文件具有连接到数据库的相同的macros。 而macros包含连接string。 macros是密码保护,但幸运的是我知道密码。

问题:在所有文件中的macros中更改连接string的最佳方法是什么?

我有与NPOI合作创build/修改xls文件的经验。 我已经看到互操作图书馆解锁密码保护的Word文件,并做一些编辑。 但是我从来没有见过在Excel文件中编程改变macros文本的例子。 这甚至可能吗?

ps我写代码没有问题。 问题是select正确的工具。

您可能需要使用以下代码作为起点。 此代码使用COM Interop来提取VBA脚本并执行查找replace。 我用一个非常基本的脚本在密码保护的电子表格上试了这个,它运行良好。 无可否认,这是基本的,但你也许能够提取你所需要的东西。

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();