Array in Excel einlesen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Matte.

    Array in Excel einlesen

    Hallo Forum, ich möchte ein Array in einer Excel Datei speichern, habe auch hier schon ein ganz gutes Beispiel gefunden:

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Dim oExcel As Object
    2. Dim oBook As Object
    3. Dim oSheet As Object
    4. 'Start a new workbook in Excel
    5. Set oExcel = CreateObject("Excel.Application")
    6. Set oBook = oExcel.Workbooks.Add
    7. 'Create an array with 3 columns and 100 rows
    8. Dim DataArray(1 To 100, 1 To 3) As Variant
    9. Dim r As Integer
    10. For r = 1 To 100
    11. DataArray(r, 1) = "ORD" & Format(r, "0000")
    12. DataArray(r, 2) = Rnd() * 1000
    13. DataArray(r, 3) = DataArray(r, 2) * 0.7
    14. Next
    15. 'Add headers to the worksheet on row 1
    16. Set oSheet = oBook.Worksheets(1)
    17. oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")
    18. 'Transfer the array to the worksheet starting at cell A2
    19. oSheet.Range("A2").Resize(100, 3).Value = DataArray
    20. 'Save the Workbook and Quit Excel
    21. oBook.SaveAs "C:\Book1.xls"
    22. oExcel.Quit


    nun will ich es ausprobieren, scheitere aber an dieser Zeile:

    VB.NET-Quellcode

    1. oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")


    Als Fehlermeldung erscheint, dass Array als Typ nicht als Ausdruck verwendet werden kann. Was muss ich statt dessen schreiben.
    Vielen Dank!

    Matte

    Das geht über Grundlagen hinaus => Topic verschoben

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Man kann das Problem auch einfach so lösen:

    VB.NET-Quellcode

    1. oSheet.Range("A1").Value = "Datenblatt"
    2. oSheet.Range("B1").Value = "Test"
    3. oSheet.Range("A1:B1").Font.Bold = True

    ist also recht einfach.

    Aber eine Frage hätte ich wohl noch:


    ich komme nicht dahinter, wie / wo ich einen SaveFileDialog in dieses Beispiel integriere.
    Hab irgendwie das Gefühl, dass

    VB.NET-Quellcode

    1. oBook.SaveAs "C:\Book1.xls"
    dazu nicht geeignet ist. Aber wie dann??

    Vielen Dank!
    Hallo Forum,

    leider habe ich noch immer mein Problemchen, Variablen in einem Excel-Datenblatt zu speichern. Es funktioniert zwar irgendwie, aber nicht so richtig. Man sieht nach meinem Speichervorgang die neu erstellte ExcelDatei, die eine Größe von 0KB hat. Desweiteren wird im Explorer eine temporäre Exceldatei erzeugt. Wenn ich diese anklicke Öffnet sich Excel und wenn ich die Excel schließe ist die ursprüngliche Datei mit den Daten beladen.
    Wenn ich die 0KB Datei öffnen möchte, gibt es die Fehlermeldung, dass die Datei nicht vorhanden ist.
    Ich denke mit meinem Abspeichervorgang aus der Programm stimmt etwas nicht.

    Kann mir jemand Rat geben, was ich falsch mache?

    VB.NET-Quellcode

    1. 'SpeicherModul
    2. Dim mystream As Stream
    3. Dim saveFileDialog1 As New SaveFileDialog()
    4. Dim speicherVar As String
    5. saveFileDialog1.Filter = "Excel (*.xls)|*.xls|Excel 2007 (*.xlsx)|*.xlsx"
    6. saveFileDialog1.FilterIndex = 2
    7. saveFileDialog1.RestoreDirectory = True
    8. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    9. mystream = saveFileDialog1.OpenFile()
    10. If (mystream IsNot Nothing) Then
    11. ' Code to write the stream goes here.
    12. mystream.Close()
    13. End If
    14. speicherVar = DirectCast(mystream, System.IO.FileStream).Name
    15. oBook.SaveAs(speicherVar)
    16. End If


    Vielen Dank!
    Gruß
    Matte
    ich verstehe nicht ganz was du hier mit dem Stream machst, ich schätze mal, dass Excel das nicht speichern kann, weil die Datei ja bereits von einem Stream verwendet wird, also wie wäre es denn mit:

    VB.NET-Quellcode

    1. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    2. oBook.SaveAs(saveFileDialog1.FileName)
    3. End If


    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo jvbsl!

    Vielen Dank für Deine Antwort.
    Leider ändert dein Rat gar nichts. Der Speichervorgang läuft immernoch genau so komisch ab. Um sicher zu gehen, dass ich Deine Antwort richtig verstanden haben: Hier der Code:

    VB.NET-Quellcode

    1. 'SpeicherModul
    2. 'Dim mystream As Stream
    3. Dim saveFileDialog1 As New SaveFileDialog()
    4. 'Dim speicherVar As String
    5. saveFileDialog1.Filter = "Excel (*.xls)|*.xls|Excel 2007 (*.xlsx)|*.xlsx"
    6. saveFileDialog1.FilterIndex = 2
    7. saveFileDialog1.RestoreDirectory = True
    8. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    9. oBook.SaveAs(saveFileDialog1.FileName)
    10. 'mystream = saveFileDialog1.OpenFile()
    11. 'If (mystream IsNot Nothing) Then
    12. ' Code to write the stream goes here.
    13. 'mystream.Close()
    14. 'End If
    15. 'speicherVar = DirectCast(mystream, System.IO.FileStream).Name
    16. 'oBook.SaveAs(speicherVar)
    17. end if


    Gruß
    Matte
    Hallo,

    richtig verstanden und umgesetzt ja...
    ich denke, dass du auch das Dateiformat übergeben musst, guck dir dazu evtl. mal am besten diese Seite an:
    msdn.microsoft.com/de-de/libra…ok.saveas%28VS.80%29.aspx

    Edit:
    gerade rausgefunden:
    xlsx = 51
    xls = 56

    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Meinst Du so was:

    VB.NET-Quellcode

    1. Dim saveFileDialog1 As New SaveFileDialog()
    2. Dim Filename As Object
    3. Dim FileFormat As Object
    4. saveFileDialog1.Filter = "Excel (*.xls)|*.xls|Excel 2007 (*.xlsx)|*.xlsx"
    5. saveFileDialog1.FilterIndex = 2
    6. saveFileDialog1.RestoreDirectory = True
    7. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    8. Filename = saveFileDialog1.FileName
    9. FileFormat = 51
    10. oBook.SaveAs(Filename, FileFormat)
    11. End If


    Nö - ändert leider auch nichts? es bleibt eine datei die bspw. so heißt: ~$test12.xlsx
    Gruß
    Matte
    Hallo,

    nimm mal bei FileName den Typ String und bei FileFormat den Typ Integer...guck dir auch evtl mal Excel.XlFileFormat an, evtl. sind es da andere Integer Werte, als in VBA(was ich eigt. nicht glaube, aber möglich wäre es)

    ansonsten kann ich dir nicht helfen, da ich kein Excel, sondern nur OpenOffice installiert habe...

    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hmm? Nun ja - vielen Dank auf jeden Fall für Deine Mühe!

    Vielleicht weiß ja sonst noch jemand Rat?

    Hier noch mal der gesamte Code:

    VB.NET-Quellcode

    1. Dim oExcel As Object
    2. Dim oBook As Object
    3. Dim oSheet As Object
    4. 'Start a new workbook in Excel
    5. oExcel = CreateObject("Excel.Application")
    6. oBook = oExcel.Workbooks.Add
    7. 'Add headers to the worksheet on row 1
    8. oSheet = oBook.Worksheets(1)
    9. Dim n As Integer = Sig.Aufzeichnung.Values.Count
    10. If n = 0 Then
    11. oSheet.Range("B8").Value = "Es liegen keine Messungen vor"
    12. Else
    13. 'Erstell array für Excel
    14. Dim excel(0 To n, 0 To 6) As Object
    15. Dim h As Integer
    16. For h = 1 To n
    17. excel(h, 1) = Sig.Aufzeichnung(h).BildNr
    18. excel(h, 2) = Sig.Aufzeichnung(h).Position
    19. excel(h, 4) = Sig.Aufzeichnung(h).MessID
    20. excel(h, 5) = Round(Sig.Aufzeichnung(h).speed, 2)
    21. excel(h, 6) = Sig.Aufzeichnung(h).Zeit
    22. Next
    23. 'Füge Array in Excel ein
    24. oSheet.Range("A8").Resize(n, 7).Value = excel
    25. End If
    26. 'SpeicherModul
    27. 'Dim mystream As Stream
    28. Dim saveFileDialog1 As New SaveFileDialog()
    29. Dim Filename As Object
    30. Dim FileFormat As Object
    31. 'Dim speicherVar As String
    32. saveFileDialog1.Filter = "Excel (*.xls)|*.xls|Excel 2007 (*.xlsx)|*.xlsx"
    33. saveFileDialog1.FilterIndex = 2
    34. saveFileDialog1.RestoreDirectory = True
    35. If saveFileDialog1.ShowDialog() = DialogResult.OK Then
    36. Filename = saveFileDialog1.FileName
    37. FileFormat = 51
    38. oBook.SaveAs(Filename, FileFormat)
    39. 'speicherVar = DirectCast(mystream, System.IO.FileStream).Name
    40. 'oBook.SaveAs(speicherVar)
    41. 'Löscht die gespeigerten Daten aus dem Speicher
    42. Sig.Aufzeichnung.Clear()
    43. lstAnzeigeBox.Items.Clear()
    44. End If


    Gruß
    Matte
    Hallo,

    natürlich würde es das ganze einfacher machen, wenn du mal die .Net mittel verwenden würdest :P (Verweise hinzufügen->Microsoft.Interop.Excel oder so ähnlich)...und die Typen deiner Variablen hast du immer noch nicht geändert :P, das kann dir mal später sehr viele Probleme machen String=Character-Array=Text Integer=Ganzzahliger 32 Bit wert...

    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---