将 RichText(来自 RichTextBox、RTF 文件或剪贴板)插入 Word 文档(书签或 Find/Replace)
Insert RichText (From RichTextBox, RTF File, OR Clipboard) into Word Document (Bookmarks or Find/Replace)
总结一下我正在尝试做的事情,我在一家非营利组织工作,当有人向我们捐款时,该组织会发出确认信(基本上是谢谢)。我们每个月都会写多封不同的信件,并发送给 IS "process"。我想让它尽可能高效并为 IS 使用尽可能少的时间,所以我在 VB.NET 中创建了一个程序,它获取内容并将其粘贴到使用 Word 书签的模板中,更新 table 在 SQL 中,以便可以使用实时数据测试这封信,并向生产部门发送一封电子邮件,让他们知道要测试这封信。它完全可以工作,除了...
当我将内容插入信件模板时,我一直想不出如何保留 RTF (RichText)。
我试过将 RichTextBox 的内容保存为 RTF 文件,但我不知道如何将 RTF 文件内容插入我的文档模板并替换书签。
我试过使用 Clipboard.SetText, odoc......粘贴方法,但它不可靠,因为我无法准确说明我希望将文本粘贴到哪里。 find/replace 功能不是很有用,因为我要替换的所有书签都在文本框中。
我会展示一些代码,但由于无法正常工作,大部分代码已被删除。无论哪种方式,这是我一直在使用的一些代码:
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" 没有被替换(当使用剪贴板和 find/replace 方法时),或者被替换为没有格式的 "TEST"。
我想通了!我不得不以一种奇怪的方式来做,但它有效。
以下代码将 RichTextBox 保存为 .rtf 文件:
RichTextBoxName.SaveFile("temp .rtf file location")
然后我使用以下代码将 .rtf 文件插入到书签中:
goWord.ActiveDocument.Bookmarks("BookmarkName").Select()
goWord.Selection.InsertFile(FileName:="temp .rtf file location")
然后我删除了临时文件:
If My.Computer.FileSystem.FileExists("temp .rtf file location") Then
My.Computer.FileSystem.DeleteFile("\temp .rtf file location")
End If
总结一下我正在尝试做的事情,我在一家非营利组织工作,当有人向我们捐款时,该组织会发出确认信(基本上是谢谢)。我们每个月都会写多封不同的信件,并发送给 IS "process"。我想让它尽可能高效并为 IS 使用尽可能少的时间,所以我在 VB.NET 中创建了一个程序,它获取内容并将其粘贴到使用 Word 书签的模板中,更新 table 在 SQL 中,以便可以使用实时数据测试这封信,并向生产部门发送一封电子邮件,让他们知道要测试这封信。它完全可以工作,除了...
当我将内容插入信件模板时,我一直想不出如何保留 RTF (RichText)。
我试过将 RichTextBox 的内容保存为 RTF 文件,但我不知道如何将 RTF 文件内容插入我的文档模板并替换书签。
我试过使用 Clipboard.SetText, odoc......粘贴方法,但它不可靠,因为我无法准确说明我希望将文本粘贴到哪里。 find/replace 功能不是很有用,因为我要替换的所有书签都在文本框中。
我会展示一些代码,但由于无法正常工作,大部分代码已被删除。无论哪种方式,这是我一直在使用的一些代码:
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" 没有被替换(当使用剪贴板和 find/replace 方法时),或者被替换为没有格式的 "TEST"。
我想通了!我不得不以一种奇怪的方式来做,但它有效。
以下代码将 RichTextBox 保存为 .rtf 文件:
RichTextBoxName.SaveFile("temp .rtf file location")
然后我使用以下代码将 .rtf 文件插入到书签中:
goWord.ActiveDocument.Bookmarks("BookmarkName").Select()
goWord.Selection.InsertFile(FileName:="temp .rtf file location")
然后我删除了临时文件:
If My.Computer.FileSystem.FileExists("temp .rtf file location") Then
My.Computer.FileSystem.DeleteFile("\temp .rtf file location")
End If