2015-12-15 32 views
1

我将一些较早的WordBasic元素移植到使用vb.net的VSTO项目中的Word vba项目。我需要做的一项任务是以编程方式将字符串或表单上文本框的内容保存为Word模板中的自动图文集值。Word VSTO:将字符串保存为自动图文集的值

在旧项目中,这很容易。该命令看起来是这样的:

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) 

不起作用,因为AutoTextEntries.Add方法只接受值作为Word.Range。使用上面的代码在运行时抛出类型转换错误。它必须看起来像:

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

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

+0

有一点要记住,你转换这是自动图文集作为一个整体并没有真正存在字,了。这个概念被扩展了,现在被称为BuildingBlocks。自动图文集是BuildingBlocks中的“图库”。出于向后兼容的原因,旧命令仍然有效,但是您应该考虑是否迁移到较新的对象模型概念,该概念允许您将BuildingBlocks分解为类别和库。 –

+0

该方法需要Range的原因是经常格式化应该包含在BuildingBlock中,而不仅仅是一个字符串。选择格式的唯一“合理”方法是将方法指向Range。如果您不想在“真实”文档(或模板)中执行此操作,则可以创建用于创建条目的隐藏“临时”文档。然后在不保存的情况下关闭该文档。 –

+0

另一种可能的方法是通过Word Open XML管理BuildingBlock条目,直接写入文件而不是通过对象模型工作。只是抛出主意...... –

回答

1

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

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

测试,并在Word 2013年工作