2016-02-29 60 views
0

我有一個已格式化郵件合併域({ MERGEFIELD Payment_Date \@ "MMMM d,yyyy" })的現有word文檔。郵件合併替換整個合併域並丟失格式化

當我通過一個字符串(說((01/01/2016))從C#做一個郵件合併代碼field.Select()選擇整個合併領域,並用我傳遞的字符串,我輸了格式。

我該如何預防?

foreach (Microsoft.Office.Interop.Word.Field field in document.Fields) 
{       
    if (field.Code.Text.Contains("Payment_Date")) 
    { 
     DateTime pDate = new DateTime(2016, 12, 30); 
     field.Select();         

     application.Selection.TypeText(pDate.ToString());    
    } 
}  

這是我用來做郵件合併的代碼。

回答

0

您必須從字段中提取格式字符串並將其轉換爲可讓您正確格式化C#字符串的內容,或者(更簡單的IMO)將字段替換爲保留格式字符串的字段並讓Word執行格式化爲你。

例如,你可能會認爲你插入YYYY-MM-DD格式的日期字符串能夠與

{ QUOTE "2016-12-30" \@ "MMMM d,yyyy" } 

(我會建議來取代它,因爲我相信Word總是解釋日期和月份在這種情況下正確)。 (注意,你不能只用{}插入文本 - 你必須插入一個字段,然後,如果你只是想要結果,你可以確保該字段已更新,然後取消鏈接該字段,只需留下結果)。

還有一種情況 - 如果MERGEFIELD字段沒有日期/時間格式切換,該怎麼辦?在這種情況下,您需要強制使用一種格式(我認爲不可能發現文檔作者的意圖)。