将VBA脚本添加到Office Word文档

时间:2011-07-02 00:34:55

标签: java word-vba office-2007 docx

Java中是否存在允许将预先编写的VBA代码添加到文档中的库? 我有很多文件,我需要在所有文档中插入相同的代码。

我有一个带复选框的测试,我给那些应该回答这个问题的人做了测试,后来计算得分的想法出现在脑海中并写了一些VBA代码,现在我需要包括那个一旦我把它们拿回来,就把所有的测试文件都拿出来。

我正在寻找一个Java库,但如果在Delphi或VB中有更简单的方法,那就太棒了!

提前致谢, 此致,塔哈

3 个答案:

答案 0 :(得分:3)

Java COM Automation with Jacob and JBuilder(包含Word示例)

J-Integra(非免费):Automating Microsoft Word with Java (and J-Integra

如果你是C#(或VB.NET),它会更容易(加上有成千上万的例子):How to automate Microsoft Word to create a new document by using Visual C#

答案 1 :(得分:2)

我已经使用docx4j(Java)和VSTO Word加载项(C#,OpenXML SDK)将宏注入到现有docx中。

这是docx4j代码(最近没有测试过):

// Add our macro to the document

// Get vbaProject.bin, and attach it to wordDocumentPart

java.io.InputStream is = ResourceUtils.getResource("docm/vbaProject.bin");                  
VbaProjectBinaryPart vbaProject = new VbaProjectBinaryPart();
vbaProject.setBinaryData(is);
wordDocumentPart.addTargetPart(vbaProject);

// Get /word/vbaData.xml, and attach it to vbaProject
VbaDataPart vbaData = new VbaDataPart();
java.io.InputStream is2 = ResourceUtils.getResource("docm/vbaData.xml");                    
vbaData.setDocument( is2 );

vbaProject.addTargetPart( vbaData);     

// Change the Word document's content type!
wordDocumentPart.setContentType( new ContentType(
        ContentTypes.WORDPROCESSINGML_DOCUMENT_MACROENABLED ) );
ContentTypeManager ctm = p.getContentTypeManager();
PartName partName = wordDocumentPart.getPartName();

ctm.removeContentType( partName  );
ctm.addOverrideContentType( new java.net.URI("/word/document.xml"), 
        ContentTypes.WORDPROCESSINGML_DOCUMENT_MACROENABLED);

答案 2 :(得分:1)

我认为你可能会比以往更难。除非我误解你并且你不会在你的计算机上使用这些文件,否则你将要回来的文件不包含任何代码并不重要。如果您将代码保存在Word模板中,则只需将该模板添加到Word的启动目录中,并且在启动Word时宏将自动加载。除非您更改了位置,否则它应该是以下文件夹:

%APPDATA%\Microsoft\Word\STARTUP\

如果您没有将代码保存在模板中,那很好。打开包含代码的Word文档,点击F12(或转到“另存为”),然后将“另存为类型”字段更改为文档模板。默认情况下,Word将目录更改为存储Normal.dot模板的文件夹。只需将其更改为我在上面引用的STARTUP文件夹并保存(或将其保存到桌面并随后将其移至桌面)。要稍后编辑代码,请右键单击该文件并选择“编辑”。 (默认情况下,如果您只是双击它,Windows将使用模板的设置启动新的Word文档。)