2009-10-12 21 views
3

顯然,我們的應用程序基於模板生成Word文檔的正確方法是鼓勵管理員用戶(將照看模板)在正確的合併字段或書籤中嵌入正確的合併字段或書籤模板文件。僅使用分隔字段名稱的原始MailMerge

但是在過去,我們發現我們典型的管理員用戶通常不使用MailMerge或Word中的其他任何「高級」功能,因爲必須使用合併字段而顯着拖延。我們已經嘗試過爲他們製作文檔,製作大量截圖等,但對他們來說,這一切都「非常」。

他們有幾十個模板(都只是不同種類的真正簡單的字母),並且會想要經常合理地修改它們。

他們真的想什麼是能夠只是標誌着一個簡單的分隔符像一個大括號,從而有效地標誌着一個自制的合併域到我們的應用程序(雖然話是無視它的意義),如字段:

尊敬的{} CustomerSurname

然後我們就可以拿起場(S)有幾行代碼,如:

w = New Word.Application 
d = w.Documents.Open(...) 
Dim mergedContent As String = d.Content.Text 
mergedContent = mergedContent.Replace("{CustomerSurname}", Customer.Surname) 
mergedContent = mergedContent.Replace("{CustomerPostcode}", Customer.Postcode) 
d.Content.Text = mergedContent 

這感覺很粗糙,但非常簡單(對於最終用戶)。

有沒有其他人走下這條路?有什麼問題嗎?我們建議他們不要在文檔的正常文本的其他地方使用「{」和「}」字符,但這並不是一個重要的限制。

速度?合併字段跨越兩行?其他問題?

回答

3

這是我用來查找和替換的代碼的一部分。我先試了一下你的代碼,但沒有成功。這是基於Word在錄製宏時生成的VBA代碼。

range = document.Range() 

With range.Find 
.Text = "{" & name & "}" 
.Replacement.Text = NewValueHere 
.Forward = True 
.Wrap = Word.WdFindWrap.wdFindContinue 
.Format = False 
.MatchCase = True 
.MatchWholeWord = False 
.MatchWildcards = False 
.MatchSoundsLike = False 
.MatchAllWordForms = False 
End With 
range.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll) 

我用這個代碼是因爲文檔需要與Office二進制文件格式兼容。如果您可以使用Office 2007格式,則不需要安裝Word。只需解壓縮文檔,找到\ document.xml文件,執行String.Replace("[OldValue]", "New value"),保存該文件並將其壓縮回一個包(docx文件)。 我在這裏顯示的代碼非常慢,因爲我正在自動化Word。打開Word,編輯6個字段的2個文檔並關閉應用程序需要4秒鐘在我的電腦上。

1

如果用戶確實想使用花括號,該怎麼辦?我想你應該提供一種方式來逃避他們,例如/{/}{{}}

你需要確保你的更換邏輯是不區分大小寫例如兩個{CustomerSurname}和{} Customersurname應該允許代表相同領域。甚至可以選擇允許單詞之間的空格,如{客戶姓氏}。

+0

關於區分大小寫的好處 – hawbsl 2009-12-31 09:52:00