shaileshshinde Ответов: 2

Откройте документ ms word doc в richtextbox


Как открыть файл ".doc" & ".docx" в richtextbox

Что я уже пробовал:

If DiscardChanges() Then
            OpenFileDialog1.Filter =
                "RTF Files|*.RTF|DOC Files|*.doc|" &
                "Text Files|*.TXT|All Files|*.*"
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                'fName = OpenFileDialog1.FileName
                Editor.Text = My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
                Editor.Modified = False
            End If
        End If

    End Sub
    Function DiscardChanges() As Boolean
        If Editor.Modified Then
            Dim reply As MsgBoxResult
            reply = MsgBox(
            "Text hasn’t been saved. Discard changes?",
            MsgBoxStyle.YesNo)
            If reply = MsgBoxResult.No Then
                Return False
            Else
                Return True
            End If
        Else
            Return True
        End If
    End Function

2 Ответов

Рейтинг:
1

OriginalGriff

Это не будет тривиально: RichTextBoxes принимают только обычный текст и форматированный текст - и ни DOC, ни DOCX не содержат этого. DOC-это проприетарный двоичный формат, DOCX-это сжатый XML-формат, и ни один из них никоим образом не похож на RTF-данные.

Если вы хотите получить данные Word в RichTextBox в комплекте с форматированием, вам предстоит изрядная работа, хотя вы можете "обмануть" и использовать подлинную копию Microsoft Word для чтения файла DOC / DOCX (что он может сделать) и сохранить его как временный файл в формате RTF (что он может сделать) через Interop, а затем загрузить RTF в свой элемент управления перед удалением временного файла. Я ни в коем случае не гарантирую, что он будет хорошо отформатирован, хотя я не играю с Word, если могу этого избежать.
И это ужасная кляча.


Рейтинг:
0

Maciej Los

Прежде всего, пожалуйста, прочтите Решение № 1 по OriginalGriff[^]. Он прав!

Поскольку Управления richtextbox[^] имеет Линии[^], MS Word документ[^] не имеет линий! Он имеет коллекцию из Параграфы[^].

Абзац может содержать текст, фигуры, изображения и т. д. Если вы хотите получить через взаимодействие только открытый текст, вы можете использовать следующий метод:

Imports Word = Microsoft.Office.Interop.Word

Dim sFileName As String = "fullfilename"
'open Word app
Dim wdApp As Word.Application = New Word.Application()
'open document
Dim wdDoc As Word.Document = wdApp.Documents.Open(sFileName)
'read paragraphs using Linq
Dim lines As String() = wdDoc.Paragraphs.Cast(Of Word.Paragraph) _
		.Select(Function(x) x.Range.Text.Trim()).ToArray()
'add lines
RichTextBox1.Lines = lines
'close the document
wdDoc.Close(SaveChanges:=False)
wdApp.Quit()


Не забудьте добавить ссылку на Microsoft.Офис.Interop.Word.dll! Как же так? c# - Как добавить ссылку для "Microsoft.Офис.Interop.Word" в .net - переполнение стека[^]

Для получения более подробной информации, пожалуйста, смотрите:
Документы.Открытый метод (Word) | Microsoft Docs[^]
Работа с объектами содержимого документа Word - VB.NET примеры кода[^]