2015-12-15 56 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年工作