Подводя итог тому, что я пытаюсь сделать, я работаю в некоммерческой организации, которая рассылает письма-подтверждения, когда кто-то жертвует нам деньги (в основном, спасибо). У нас есть несколько разных писем, которые пишутся каждый месяц и отправляются в IS для «обработки». Я хотел бы сделать это максимально эффективным и использовать как можно меньше времени для IS, поэтому я создал программу в VB.NET, которая принимает содержимое и вставляет его в шаблон с помощью закладок Word, обновляет таблицу в SQL, чтобы Письмо может быть проверено с живыми данными, и отправляет электронное письмо в производственный отдел, чтобы дать им знать, чтобы проверить письмо. Работает полностью, кроме ...
Я не могу понять, как сохранить RTF (RichText) при вставке содержимого в шаблон письма.
Я пытался сохранить содержимое RichTextBox в виде файла RTF, но не могу понять, как вставить содержимое файла RTF в шаблон документа и заменить закладку.
Я пытался использовать Clipboard.SetText, odoc ...... Метод вставки, но он ненадежен, поскольку я не могу точно указать, куда бы я хотел вставить текст. Функция поиска / замены не очень полезна, потому что все закладки, которые я пытаюсь заменить, находятся в текстовых полях.
Я бы показал какой-то код, но большая его часть была удалена из-за разочарования из-за неработоспособности. В любом случае, вот код, с которым я работал:
Private Sub testing()
strTemplateLocation = "\\SERVER\AcknowledgementLetters\TEST\TEMPLATE.dot"
Dim Selection As Word.Selection
Dim goWord As Word.Application
Dim odoc As Word.Document
goWord = CreateObject("Word.Application")
goWord.Visible = True
odoc = goWord.Documents.Add(strTemplateLocation)
Clipboard.Clear()
Clipboard.SetText(txtPreD.Rtf, TextDataFormat.Rtf)
odoc.Content.Find.Execute(FindText:="<fp>", ReplaceWith:=My.Computer.Clipboard.GetText)
'Code for looping through all MS Word Textboxes, but didn't produce desired results
For Each oCtl As Shape In odoc.Shapes
If oCtl.Type = Microsoft.Office.Core.MsoShapeType.msoTextBox Then
oCtl.TextFrame.TextRange.Text.Replace("<fp>", "Test")
goWord.Selection.Paste()
End If
Next
'Clipboard.Clear()
'Clipboard.SetText(txtPostD.Rtf, TextDataFormat.Rtf)
'odoc.Content.Find.Execute(FindText:="<bp>", ReplaceWith:="")
'goWord.Selection.Paste()
MsgBox("Click Ok when finished checking.")
odoc.SaveAs2("\\SERVER\AcknowledgementLetters\TEST\TEST.docx")
odoc = Nothing
goWord.Quit(False)
odoc = Nothing
goWord = Nothing
End Sub
... и вот код по умолчанию для установки закладок. Это работает идеально, если форматирование не требуется:
Private Sub SetBookmark(odoc As Object, strBookmark As String, strValue As String)
Dim bookMarkRange As Object
If odoc.Bookmarks.Exists(strBookmark) = False Then
Exit Sub
End If
bookMarkRange = odoc.Bookmarks(strBookmark).Range
If ((Err.Number = 0) And (Not (bookMarkRange Is Nothing))) Then
bookMarkRange.text = strValue
odoc.Bookmarks.Add(strBookmark, bookMarkRange)
bookMarkRange = Nothing
End If
End Sub
TL; DR - требуется форматированный текст (пример: " TEST ") для вставки в документ Word либо в виде закладки, либо в качестве замещающего текста.
Ожидаемые результаты: заменить закладку "fp" (титульный лист) на " TEST ", включая форматирование жирным шрифтом.
Фактические результаты: «fp» не заменяется (при использовании буфера обмена и метода поиска / замены) или заменяется на «TEST» без форматирования.