Vb.net Word VSTO:将字符串另存为自动图文集值

Vb.net Word VSTO:将字符串另存为自动图文集值,vb.net,ms-word,vsto,Vb.net,Ms Word,Vsto,我正在使用vb.net将一个Word vba项目(其中包含一些较旧的WordBasic元素)移植到VSTO项目中。我需要做的任务之一是以编程方式将字符串或表单上文本框的内容保存到Word模板中的“自动图文集”值 在旧项目中,这很容易。命令如下所示: WordBasic.SetAutoText "AT Name", strSomeValue, 0 在vb.net中尝试此操作: 'declarations Public appWord As Word.Application Public tplM

我正在使用vb.net将一个Word vba项目(其中包含一些较旧的WordBasic元素)移植到VSTO项目中。我需要做的任务之一是以编程方式将字符串或表单上文本框的内容保存到Word模板中的“自动图文集”值

在旧项目中,这很容易。命令如下所示:

WordBasic.SetAutoText "AT Name", strSomeValue, 0
在vb.net中尝试此操作:

'declarations
Public appWord As Word.Application
Public tplMyTpl As Word.Template
Public doc As Word.Document

'Get the template    
appWord = Me.Application
doc = appWord.ActiveDocument
tplMyTpl = doc.AttachedTemplate

'try saving autotext
tplMyTpl.AutoTextEntries.Add("AT Name", strSomeValue)
无法工作,因为AutoExtentries.Add方法仅接受作为Word.Range的值。使用上述代码在运行时引发类型转换错误。它必须看起来像:

dim sel as Word.Selection = appWord.Selection
tplMyTpl.AutoTextEntries.Add("AT Name", sel.Range)

问题是我不想在文档中插入字符串,选择它作为一个范围,保存自动图文集条目,然后删除文本。这似乎是非常草率的编码。

您仍然可以在VSTO中使用
WordBasic
。只需通过您的
Word.Application
对象引用调用它,例如:

appWord.WordBasic.SetAutoText("AT Name", strSomeValue, 0)

在Word 2013中测试和使用。

转换时要记住的一点是,自动图文集作为一个实体在Word中已经不存在了。这个概念被扩展,现在被称为构建块。自动图文集是构建块中的“图库”。由于后退的原因,旧的命令仍然有效,但是你应该考虑是否迁移到更新的对象模型概念中,它允许你将构建块分解成类别和画廊。不仅仅是一根绳子。获取格式的唯一“合理”方法是将方法指向一个范围。如果不想在“真实”文档(或模板)中执行此操作,可以创建一个隐藏的“临时”文档来创建条目。另一种可能的方法是通过Word Open XML管理构建块条目,直接写入文件,而不是通过对象模型。只是抛开这个想法…有没有一种方法可以选择RichTextBox的内容作为Word.Range,而不首先将其插入文档正文?我试图寻找一种方法,这种方式之前张贴,但没有找到。DanL的解决方案非常有效,但我能想到从RTB保存自动图文集的其他用途。什么样的富文本框?如果它不是内容控件或其他“本机”Word对象,则不是。Word.Range必须是Word的一部分。。。