marcoborn
Goto Top

Rückgabe von Objekten aus Listen

Hallo Forum,
ich versuche mich zum ersten Mal mit Listen. Zuerst wird eine Klasse mit Rohdaten definiert:
Imports Excel = Microsoft.Office.Interop.Excel
Imports Word = Microsoft.Office.Interop.Word

Public Class Rohdatenklasse
  Public Inhalt As String
  Public Typ As String
  Public Bewertung As String
  Public Hintergrund As Excel.Interior
End Class

In einer 2. Klasse werden Objekte der Klasse dann mit Werten gefüllt und an die Liste angehängt.
Dim Rohdaten As New Rohdatenklasse
Dim Rohdatenliste As New List(Of Rohdatenklasse)
Dim appWD as Word. Application
Dim appXL as Excel.Application

'weiterer Code  

For i As Integer = 1 To appWd.ActiveDocument.ListParagraphs.Count
	Rohdaten.Inhalt = appWD.ActiveDocument.ListParagraphs(i).Range.Text
	Rohdaten.Typ = IIF(Left(Rohdaten.Inhalt,1) = "B";"B";"A")  
	Rohdatenliste.Add(Rohdaten)
Next

appXL.Range("A1:D" & appWd.ActiveDocument.ListParagraphs.Count).Value = Rohdatenliste  

In der letzten Zeile erhalte ich einen Laufzeitfehler. Gibt es eine Möglichkeit, den Inhalt der Liste (die jeweils 4 Elemente pro Objekt besitzt) In die Spalten A bis D in Excel auf einmal zu übertragen, ohne dass ich hier mit 2 verschachtelten For-Schleifen arbeiten muss?

Vielen Dank,
M. Born

Content-Key: 460076

Url: https://administrator.de/contentid/460076

Printed on: April 24, 2024 at 17:04 o'clock

Member: emeriks
emeriks Jun 07, 2019 updated at 10:47:22 (UTC)
Goto Top
Hi,
in VB.Net hast Du LINQ zur Verfügung. Damit kannst Du z.B. mittels
Text = Join( Rohdatenliste.Select(Function(x) x.Inhalt & vbtab & x.Typ & vbtab & x.Bewertung & vbtab & (x.Hintergrund.ToString)).ToArray, vbnewline)
die Elemente in einen Text umwandeln. Das genannte Beispiel liefert die Objekte je Zeile, und deren Eigenschaften je Spalte.

Theoretisch müsste man das in Excel direkt einfügen können und Excel verteilt das dann automatisch auf Zeilen und Spalten. Zumindest ist das so, wenn man einen Tabulator- und Zeilen-getrennten Text aus einem Text-Editor in die Zwischenablage kopiert und von dort in Excel einfügt.

E.
Member: MarcoBorn
MarcoBorn Jun 07, 2019 at 11:52:57 (UTC)
Goto Top
Hallo,
mit LINQ hatte ich bisher noch nie zu tun. Wenn ich den von Dir erzeugten Text mittels Cells(1,1).value = Text nach Excel übertrage, packt er leider alle in eine einzige Zelle. Ich habe aber zwischenzeitlich weiter experimentiert und durch einen Umweg über ein Array einen Weg gefunden, wie ich die Listenelemente als Block nach Excel exportieren kann.

Viele Grüße,
M. Born
Member: emeriks
emeriks Jun 07, 2019 at 11:55:15 (UTC)
Goto Top
...was Du uns hier zeigst?
Member: MarcoBorn
MarcoBorn Jun 07, 2019 at 12:05:30 (UTC)
Goto Top
Dim myarr(1000, 1) As Object
For i = 0 To Rohdatenliste.Count - 1
	myarr(i, 0) = Rohdatenliste(i).Inhalt
	myarr(i, 1) = Rohdatenliste(i).Typ
'usw.  
Next

appXL.Range("A1").Resize(1000, 2).Value = myarr  

Ich habe hier zum Test nur die ersten beiden Spalten gefüllt. In der Praxis kommen da noch etliche Spalten mehr dazu...