是否可以使用API??从Word 2007 " docm "文档中提取所有VBA代码?
我发现了如何在运行时插入VBA代码,以及如何删除所有VBA代码,但没有将实际代码提取到我可以存储的流或字符串中(以后再插入其他文档中)。铅>
任何技巧或资源将不胜感激。
编辑:感谢所有人,Aardvark的答案正是我所寻找的。我已经将他的代码转换为C#,并能够使用Visual Studio 2008从类库中调用它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| using Microsoft.Office.Interop.Word;
using Microsoft.Vbe.Interop;
...
public List<string> GetMacrosFromDoc()
{
Document doc = GetWordDoc(@"C:\\Temp\\test.docm");
List<string> macros = new List<string>();
VBProject prj;
CodeModule code;
string composedFile;
prj = doc.VBProject;
foreach (VBComponent comp in prj.VBComponents)
{
code = comp.CodeModule;
// Put the name of the code module at the top
composedFile = comp.Name + Environment.NewLine;
// Loop through the (1-indexed) lines
for (int i = 0; i < code.CountOfLines; i++)
{
composedFile += code.get_Lines(i + 1, 1) + Environment.NewLine;
}
// Add the macro to the list
macros.Add(composedFile);
}
CloseDoc(doc);
return macros;
} |
您可以将代码导出到文件中,然后再读回。
我一直在使用下面的代码来帮助我将某些Excel宏保持在源代码控制下(使用Subversion)
您必须添加对Microsoft Visual Basic for Applications Extensibility 5.3(或您拥有的任何版本)的引用。我的package盒上有VBA SDK等-所以这可能不是Office附带的。
还必须专门启用对VBA对象模型的访问-请参阅Word选项中的"信任中心"。这是Office提供的所有其他其他宏安全设置的补充。
此示例将从其所在的当前文档中提取代码-它本身是VBA宏(还将显示其自身以及任何其他代码)。还有一个Application.vbe.VBProjects集合可访问其他文档。尽管我从未做过,但我假设外部应用程序也可以使用此VBProjects集合打开文件。安全对于这些东西很有趣,因此可能很棘手。
我还想知道docm文件格式现在是什么-像docx这样的XML?那会是更好的方法吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Sub GetCode()
Dim prj As VBProject
Dim comp As VBComponent
Dim code As CodeModule
Dim composedFile As String
Dim i As Integer
Set prj = ThisDocument.VBProject
For Each comp In prj.VBComponents
Set code = comp.CodeModule
composedFile = comp.Name & vbNewLine
For i = 1 To code.CountOfLines
composedFile = composedFile & code.Lines(i, 1) & vbNewLine
Next
MsgBox composedFile
Next
End Sub |