当前位置: > > > > 使用 Go OLE 绑定创建 MS Word 文档
使用 Go OLE 绑定创建 MS Word 文档
来源:stackoverflow
2024-04-25 15:45:34
0浏览
收藏
目前米云上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《使用 Go OLE 绑定创建 MS Word 文档》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~
问题内容
我一直在尝试并学习如何以编程方式制作 word 文档。我知道使用 pywin32 可以轻松完成。这个简单的代码片段检索新 word 文档内的默认 visual basic“代码”。
import win32com.client
word = win32com.client.dispatch("word.application")
word.visible = true
document = word.documents.add()
document.vbproject.name = "test"
wordmodule = document.vbproject.vbcomponents("thisdocument") # works
input()
然后您可以将 vb 代码添加到 wordmodule。
我想使用 golang 做同样的事情。 go 有一个 ole 绑定,代码在 github -> https://github.com/go-ole/go-ole
它对用户不太友好,但我设法让它工作,只是我无法检索默认的 vbcomponents。
默认代码位于“thisdocument”中,可以使用简单的 python 代码 document.vbproject.vbcomponents("thisdocument") 进行检索,但它在 go 中不起作用… 您可以在下面的代码中看到,我尝试使用多种方式获取“thisdocument”,但没有成功。每次错误信息都是panic: unknown name.
// +build windows
package main
import (
"fmt"
ole "github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
)
func main() {
defer ole.CoUninitialize()
ole.CoInitialize(0)
unknown, _ := oleutil.CreateObject("Word.Application")
word, _ := unknown.QueryInterface(ole.IID_IDispatch)
oleutil.PutProperty(word, "Visible", true)
documents := oleutil.MustGetProperty(word, "Documents").ToIDispatch()
document := oleutil.MustCallMethod(documents, "Add").ToIDispatch()
vbproject := oleutil.MustGetProperty(document, "VBProject").ToIDispatch()
oleutil.PutProperty(vbproject, "Name", "TEST")
// oleutil.MustCallMethod(vbproject, "VBComponents", "ThisDocument").ToIDispatch() --> panic: Unknown name.
// oleutil.MustGetProperty(vbproject, "VBComponents", "ThisDocument").ToIDispatch() --> panic: Unknown name.
// vbcomponents := oleutil.MustGetProperty(vbproject, "VBComponents").ToIDispatch()
// oleutil.MustGetProperty(vbcomponents, "ThisDocument").ToIDispatch() --> panic: Unknown name.
var input string
fmt.Scanln(&input)
oleutil.PutProperty(document, "Saved", true)
oleutil.CallMethod(documents, "Close", false)
oleutil.CallMethod(word, "Quit")
word.Release()
}
关于为什么它不起作用有什么想法吗? 非常感谢。
解决方案
事实证明,"github.com/go-ole/go-ole" 在使用 foreach 时存在错误。 vbcomponets 是一个 collection,因此您必须按照 microsoft 文档所述进行迭代
使用 vbcomponents 集合来访问、添加或删除项目中的组件。组件可以是表单、模块或类。 vbcomponents 集合是一个标准集合,可以在 for…each 块中使用。
这一行-> 应替换为
newEnum, err := disp.CallMethod("_NewEnum")
现在它按预期工作了。
终于介绍完啦!小伙伴们,这篇关于《使用 Go OLE 绑定创建 MS Word 文档》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~米云公众号也会发布Golang相关知识,快来关注吧!
