VB.net,将RTF文本框内容导出到Excel单元格

时间:2019-04-04 14:09:32

标签: excel vb.net interop rtf

我有一个RichTextFormat文本框,其中包含多行,粗体,下划线和斜体文本。我需要将文本和字体样式都粘贴到Excel单元格中,因此“ SAMPLE ”仍然是“ SAMPLE ”,而不是“ SAMPLE”或“ SAMPLE \ b0” \ par“。

我目前正在尝试

ExcelApp.Range("C2").Value = RTFTB.Rtf

那给了我

  

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1036 {\ fonttbl {\ f0 \ fnil \ fcharset0   Calibri;}}   \ viewkind4 \ uc1 \ pard \ b \ f0 \ fs23采样粗体\ b0 \ par   \ par   \ i SAMPLE ITALIC \ i0 \ par   \ par   \ ul SAMPLE UNDERLINE \ par   \ par   \ ulnone样本正常\标准   }

(RTF代码)

ExcelApp.Range("C2").Value = RTFTB.Text

那给了我

  

粗体

     

SAMPLE ITALIC

     

样品下划线

     

样品正常

(没有字体)

2 个答案:

答案 0 :(得分:1)

我不建议使用剪贴板传输信息。但是,如果不将RTF转换为一系列UI Automation命令以模拟将文本添加到Excel然后对其进行格式化,我将无法实现您的目标。

可以使用以下方法将RTF作为HTML放置在剪贴板上。它在可编辑模式下使用len( tokenlist )控件将剪贴板的RTF格式转换到HTML。然后将HTML放置在剪贴板上。

总体顺序为:

  1. 将RTF作为RTF放在剪贴板上
  2. 创建一个WebBrowser控件并将其DocumentText设置为可编辑的HTML。

    在WebBrowser.DocumentCompleted事件处理程序中,

  3. 将RTF粘贴到WebBrowser。

  4. 选择所有HTML并复制。
  5. 最后,处置WebBrowser控件。

...

Webbrowser

编辑:

我使用以上内容将RTF作为HTML放在剪贴板上,以供用户手动粘贴。因此,我没有考虑使用时间紧迫的用例(例如Excel自动化)的含义。

对于自动化情况,最好不要每次都创建控件。此外,通过自动粘贴到Excel(可能与Office剪贴板有关)时,似乎还有其他机制在起作用,这再次表明我不喜欢使用剪贴板。

但是,我发现以下起作用可以将格式化的RTF复制到Excel。我的Office版本比较旧(2007),因此希望它在新版本上仍然适用。创建一个新的WinForm应用程序,并用以下内容替换Form1.VB内容以对其进行测试。在运行代码时,单击“执行”按钮创建一个Excel实例,并将一些已格式化的RTF粘贴到该实例。

Public Shared Sub RtfToHtmlClipboard(rtf As String)
    Clipboard.SetData(DataFormats.Rtf, rtf)
    Dim browser As New WebBrowser
    AddHandler browser.DocumentCompleted, Sub(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
                                            Dim wb As WebBrowser = CType(sender, WebBrowser)
                                            wb.Document.ExecCommand("Paste", False, Nothing)
                                            wb.Document.ExecCommand("SelectAll", False, Nothing)
                                            wb.Document.ExecCommand("Copy", False, Nothing)
                                            wb.Dispose()
                                          End Sub

    browser.DocumentText = "<html><body contenteditable=""true""></body></html>"
End Sub

答案 1 :(得分:0)

我最终没有做RTF to HTML to Excel解决方案,因为我没有必要的技能

相反,我是这样做的:

  • 复制整个RichTextBox

  • 将其粘贴到Word

  • 复制Word文档

  • 将其粘贴到Excel

这不是完美的,因为它变成了图像而不是文本,但至少可以正常工作。

这是我的代码:


'Phase 1 : Copy the RichTextBox

        TbRTF.SelectAll()
        TbRTF.Copy()
        Clipboard.SetData(DataFormats.Rtf, TbRTF.Rtf)

'Prepare phase 2 : Declare variables

        Dim aDoc As Word.Document = WordApp.Documents.Open("a blank word file.docx")
        Dim TheRange As Word.Range = aDoc.ActiveWindow.Selection.Range

'Phase 2 : Paste into Word

        WordApp.Visible = False

        TheRange.WholeStory()
        TheRange.Paste()

'Phase 3 : Copy from Word

        TheRange.WholeStory()
        WordApp.ActiveDocument.Select()
        WordApp.Selection.Copy()

'Phase 3.5 : Close Word

        aDoc.Close()
        WordApp.Quit()

'Phase 4 : Paste into Excel

        ExcelApp.Range("D" & r).PasteSpecial()

'Phase 4.5 : Close Excel

        Classeur.SaveAs("FinishedExcelFile.xlsx")
        Classeur.Close()
        ExcelApp.Quit()