我正在处理Excel文件的目录以获取有关每个文件的信息。我正在尝试使用C#Excel互操作来收集有关这些文件中某些文件的VBA宏的信息。代码如下。问题是没有一个excel文件可以通过编程访问启用的宏。我可以在文件的本地副本上手动切换,但我目前只能读取文件目录。有没有什么办法可以暂时改变我的代码中的编程访问设置(读取VBA代码,不作任何改变)而没有写权限?C#编程访问Excel宏
此外,我只知道如何手动更改编程访问(通过每个Excel文件中的设置)。鉴于我可能最终只需要读/写访问权限,有没有什么办法可以在批处理过程中做到这一点,以节省大量手动打开和关闭文件的时间?
VBA.VBProject project = WorkBook.VBProject;
VBA.VBComponents VBComponents = project.VBComponents;
string projectName = project.Name;
VBA.vbext_ProcKind procedureType = Microsoft.Vbe.Interop.vbext_ProcKind.vbext_pk_Proc;
VBA.VBComponent vbFunction;
foreach (Excel.Worksheet sheet in VBComponents)
{
vbFunction = sheet as VBA.VBComponent;
if (vbFunction != null)
{
VBA.CodeModule componentCode = vbFunction.CodeModule;
int componentCodeLines = componentCode.CountOfLines;
int line = 1;
while (line < componentCodeLines)
{
//EXAMINE LINE
line++;
}
}
}
。
编辑:
所产生的“收到COMException了未处理 - 到Visual Basic项目的编程访问不受信任”确切的错误信息。
我已经发现,如果我打开其中一个只读文件并更改设置,我会得到不同的错误消息。我无法保存文件,但是如果保持打开状态,当它到达第一个.xlsm文件时,它将显示错误消息“COMException未处理 - 由于项目受到保护,无法执行操作”。
我怀疑你能做到这一点,这听起来像是一个重大的安全风险。 – Mathias
这就是我所预期的......我希望我至少可以批量更改,假设我有写入权限来执行此操作......我不想通过该目录,手动进行所有更改... – Jonathan
您谈论的是什么设置?它是对VBA项目对象模型*设置的* Trust访问权限吗?这是一个应用程序范围的设置,而不是每个文件的设置。如果你不能改变,你可以编写自己的解析器直接从二进制文件中提取宏对象(这可以在2-3天内完成)。 –