以编程方式更改 Excel 中的宏文本
本文关键字:文本 Excel 编程 方式更 | 更新日期: 2023-09-27 17:55:44
我有大约数千个Excel(xls,旧格式)文件分布在硬盘驱动器上的许多文件夹中。这些文件具有连接到数据库的相同宏。宏包含连接字符串。宏受密码保护,但幸运的是我知道密码。
问:更改所有文件内宏中的连接字符串的最佳方法是什么?
我有与NPOI合作创建/修改xls文件的经验。我已经看到互操作库解锁受密码保护的Word文件并进行一些编辑。但我从未见过以编程方式更改 Excel 文件中宏文本的示例。这可能吗?
附言我在编写代码时没有问题。问题在于选择正确的工具。
您可能希望使用以下代码作为起点。 此代码使用 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();