使用Go OLE绑定创建MS Word文档

使用Go OLE绑定创建MS Word文档,go,ms-word,ole,Go,Ms Word,Ole,我一直在玩游戏,学习如何以编程方式制作Word文档。我知道使用pywin32可以很容易地完成。这个简单的代码片段检索新单词doc中的默认Visual Basic“代码” 导入win32com.client word=win32com.client.Dispatch(“word.Application”) word.Visible=True document=word.Documents.Add() document.VBProject.Name=“测试” wordModule=document.

我一直在玩游戏,学习如何以编程方式制作Word文档。我知道使用
pywin32
可以很容易地完成。这个简单的代码片段检索新单词doc中的默认Visual Basic“代码”

导入win32com.client
word=win32com.client.Dispatch(“word.Application”)
word.Visible=True
document=word.Documents.Add()
document.VBProject.Name=“测试”
wordModule=document.VBProject.VBComponents(“ThisDocument”)#有效
输入()
然后,您可以将VB代码添加到
wordModule

我想用Golang做同样的事情。Go有一个OLE绑定,代码在Github上->

它的用户友好性稍差,但我成功地使它工作了,只是我无法检索默认的
VBComponents

默认代码驻留在“ThisDocument”中,可以使用简单的python代码
document.VBProject.VBComponents(“ThisDocument”)
进行检索,但它在Go。。。 您可以在下面的代码中看到,我试图通过多种方式获取“ThisDocument”,但没有成功。每次,错误消息都是
panic:Unknown name.

/+构建窗口
包干管
进口(
“fmt”
ole“github.com/go-ole/go-ole”
“github.com/go-ole/go-ole/oleutil”
)
func main(){
延迟ole.conInitialize()
ole.CoInitialize(0)
未知,Util:=oleutil.CreateObject(“Word.Application”)
word,:=未知的.QueryInterface(ole.IID_IDispatch)
oleutil.PutProperty(单词“可见”,true)
documents:=oleutil.MustGetProperty(单词,“documents”).ToIDispatch()
document:=oleutil.MustCallMethod(documents,“Add”).ToIDispatch()
vbproject:=oleutil.MustGetProperty(文档,“vbproject”).ToIDispatch()
oleutil.PutProperty(vbproject,“名称”,“测试”)
//oleutil.MustCallMethod(vbproject,“VBComponents”,“ThisDocument”).ToIspatch()-->panic:未知名称。
//oleutil.MustGetProperty(vbproject,“VBComponents”,“ThisDocument”).ToIspatch()-->panic:未知名称。
//vbcomponents:=oleutil.MustGetProperty(vbproject,“vbcomponents”).ToIDispatch()
//oleutil.MustGetProperty(vbcomponents,“ThisDocument”).ToIspatch()-->panic:未知名称。
变量输入字符串
fmt.扫描和输入
oleutil.PutProperty(文档“已保存”,true)
CallMethod(文档“关闭”,false)
oleutil.CallMethod(单词“Quit”)
word.Release()
}
你知道为什么它不起作用吗? 非常感谢。

结果是
“github.com/go-ole/go-ole”
在使用
ForEach
时有一个bug
VBComponets
是一个
集合
,因此您必须按照Microsoft文档中的说明进行迭代

使用VBComponents集合可以访问、添加或删除项目中的零部件。组件可以是窗体、模块或类。VBComponents集合是一个标准集合,可在For…每个块中使用

这行-> 应该被替换为

newEnum,err:=disp.CallMethod(“\u newEnum”)
现在它可以正常工作了。

结果是
“github.com/go-ole/go-ole”
在使用
ForEach
时有一个bug
VBComponets
是一个
集合
,因此您必须按照Microsoft文档中的说明进行迭代

使用VBComponents集合可以访问、添加或删除项目中的零部件。组件可以是窗体、模块或类。VBComponents集合是一个标准集合,可在For…每个块中使用

这行-> 应该被替换为

newEnum,err:=disp.CallMethod(“\u newEnum”)
现在它按预期工作