Word-Export mit Typographie

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Schlumpfine75.

    Word-Export mit Typographie

    Liebes Forum,

    seit Tagen beiße ich mir an einem Problem die Zähne aus - ich habe intensiv recherchiert, aber leider keine Lösung für mein Problem gefunden. Ich bin noch Neuling in Sachen VB-Programmierung und bitte Euch daher um Hilfe und gleichzeitig um Nachsicht, sollte ich nicht von Anfang an alles verstehen ;)

    Es geht um Folgendes:
    Ich verarbeite automatisch .txt-Dateien mit tabellarischen Daten. Aus diesen Daten erzeuge ich zunächst einmal strukturierte Objekte. Es gibt die folgenden Klassen, die mir dabei als Vorlagen dienen:

    Klasse Patient

    Klasse Untersuchung

    Klasse Befund

    Klasse Ergebnis

    Zu jedem Patienten können diverse Untersuchungen vorliegen und zu jeder Untersuchung diverse Befunde. Ein Befund setzt sich aus einer variablen Zahl verschiedener Ergebnisse zusammen. Ein Einzelergebnis besteht aus einem Zahlenwert. Der Befund „BEFUND XYZ" wird dann wie folgt dargestellt „15/16/17/18". Soweit alles kein Problem und schon umgesetzt. Aber jetzt kommts:

    Sämtliche in den Objekten abgelegten Befunde sollen in eine wie folgt strukturierte Tabelle geschrieben und nach Word exportiert werden. Dabei sollen Ergebnisse, die ein bestimmtes Kriterium erfüllen (Abweichung von einem Grenzwert), in dieser Tabelle fett hervorgehoben werden.

    Patient
    Untersuchung „XYZ"
    Untersuchung „ABC"
    Untersuchung „GHG"
    Untersuchung „LKJ"
    Hans H.
    15/16/17/18
    6/9/10
    11.5/11.6/11.7
    12
    Eva E.
    12/13
    2/3/4/5/6
    11.9/12
    18/19
    Peter P.
    14
    2/37/55
    12
    20/21/25/26

    Ich habe dabei diverse Probleme: Zum einen die Hervorhebung einzelner Werte als Fettdruck, zum anderen das grundlegende Problem, wie ich überhaupt in Word Tabellen generiere und sämtliche Befunde in die korrekten Spalten schreibe.

    Insbesondere hilfreich wären für mich Codeschnipsel oder Beispiele, da ich als Anfänger mit komplizierten Fachbegriffen noch nicht so wirklich gut umgehen kann.

    Danke schonmal und Grüße

    S
    Hallo

    Als erstes ein paar Grundlegende Sachen zu Word und Tabellen:

    -Automatisieren von Microsoft Word zum Erstellen eines neuen Dokuments mithilfe von Visual Basic
    -Arbeiten mit Tabellen
    -multiple format into one cell of table in word 2007 using c#

    Da ich aber nicht weiss wie die Daten in deinem Programm zur Verfügung stehen. (Dataset, Arrays oder was auch immer)

    Hier einmal ein Beispiel das ein Word-Dokument erstellt, welches oben gezeigte Tabelle enthält.
    Beim fett hervorheben habe ich mehrere Varianten verwendet.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim oWord As Word.Application
    3. Dim oDoc As Word.Document
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim Titel As New List(Of String) From {"Patient", "Untersuchung „XYZ“"", "Untersuchung „ABC“"", "Untersuchung „GHG“"", "Untersuchung „LKJ“""}
    6. Dim Patient1 As New List(Of String) From {"Hans H.", "15/16/17/18", "6/9/10", "11.5/11.6/11.7", "12"}
    7. Dim Patient2 As New List(Of String) From {"Eva E.", "12/13", "2/3/4/5/6", "11.9/12", "18/19"}
    8. Dim Patient3 As New List(Of String) From {"Peter P.", "14", "2/37/55", "12", "20/21/25/26"}
    9. Dim oTable As Word.Table
    10. Dim oPara1 As Word.Paragraph
    11. Dim oPara2 As Word.Paragraph
    12. 'Start Word and open the document template.
    13. oWord = New Word.Application
    14. oWord.Visible = True
    15. oDoc = oWord.Documents.Add
    16. oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
    17. 'Insert a paragraph at the beginning of the document.
    18. oPara1 = oDoc.Content.Paragraphs.Add
    19. oPara1.Range.Text = "Patientenübersicht"
    20. oPara1.Range.Font.Name = "Arial"
    21. oPara1.Range.Font.Size = 24
    22. oPara1.Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft
    23. oPara1.Range.Font.ColorIndex = Word.WdColorIndex.wdBlue
    24. oPara1.Range.Font.Bold = 1
    25. oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
    26. oPara1.Range.InsertParagraphAfter()
    27. 'Insert another paragraph.
    28. oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)
    29. oPara2.Range.Text = "" '"This is a sentence of normal text. Now here is a table:"
    30. oPara2.Range.Font.ColorIndex = Word.WdColorIndex.wdBlack
    31. oPara2.Range.Font.Size = 10
    32. oPara2.Range.Font.Bold = 0
    33. oPara2.Format.SpaceAfter = 24
    34. oPara2.Range.InsertParagraphAfter()
    35. 'Insert a 4 x 5 table, fill it with data, and make the first row
    36. 'bold and italic.
    37. Dim r As Integer, c As Integer
    38. oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 4, 5)
    39. oTable.Range.ParagraphFormat.SpaceAfter = 6
    40. oTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
    41. oTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
    42. r = 1
    43. For c = 1 To 5
    44. oTable.Cell(r, c).Range.Text = Titel(c - 1)
    45. Next
    46. r += 1
    47. For c = 1 To 5
    48. oTable.Cell(r, c).Range.Text = Patient1(c - 1)
    49. Next
    50. r += 1
    51. For c = 1 To 5
    52. oTable.Cell(r, c).Range.Text = Patient2(c - 1)
    53. Next
    54. r += 1
    55. For c = 1 To 5
    56. oTable.Cell(r, c).Range.Text = Patient3(c - 1)
    57. Next
    58. oTable.Rows.Item(1).Range.Font.Bold = 1
    59. oTable.Rows.Item(1).Range.Font.Italic = 1
    60. Dim boldrange As Word.Range = oTable.Cell(2, 2).Range
    61. 'Assign the whole cell range to boldrange, then adjust it with SetRange method.
    62. boldrange.SetRange(boldrange.Words(3).Start, boldrange.Words(3).End)
    63. 'boldrange.SetRange(boldrange.Start + 3, boldrange.Start + 5)
    64. boldrange.Bold = 1
    65. boldrange = oTable.Cell(2, 3).Range
    66. boldrange.SetRange(boldrange.Start + 4, boldrange.Start + 6)
    67. boldrange.Bold = 1
    68. boldrange = oTable.Cell(2, 4).Range
    69. boldrange.SetRange(boldrange.Start, boldrange.Start + 4)
    70. boldrange.Bold = 1
    71. Dim num As Double
    72. boldrange = oTable.Cell(4, 3).Range
    73. For i As Integer = 1 To boldrange.Words.Count - 1
    74. If Double.TryParse(boldrange.Words(i).Text, num) Then
    75. If num = 55 Then
    76. boldrange.SetRange(boldrange.Words(i).Start, boldrange.Words(i).End)
    77. boldrange.Bold = 1
    78. End If
    79. End If
    80. Next
    81. boldrange = oTable.Cell(4, 5).Range
    82. boldrange.SetRange(boldrange.Start, boldrange.Words(1).End)
    83. boldrange.Bold = 1
    84. End Sub
    85. End Class