Excel-Daten auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    Excel-Daten auslesen

    Moin!

    ich muss mich einem neuen Kapitel zuwenden in welchem Daten aus Excel gelesen werden sollen.

    Hierzu habe ich folgenden Code zusammengetragen:

    Visual Basic-Quellcode

    1. Private Function GetLayerKonvNames()
    2. Dim CellValue As String = ""
    3. Dim ExcelFileName As String = _Tool.GetLayerKonvertFilename
    4. Dim oExcel As Object
    5. Dim oBook As Object
    6. Dim oSheet As Object
    7. If System.IO.File.Exists(ExcelFileName) = True Then
    8. cb_output_format.Enabled = True
    9. ' öffnen der Excel-Datei
    10. Try
    11. 'Start a new workbook in Excel.
    12. oExcel = CreateObject("Excel.Application")
    13. oBook = oExcel.Open(ExcelFileName)
    14. oSheet = oBook.Worksheets(1)
    15. ' auslesen der AusgabeNamen
    16. CellValue = oSheet.Range("A2").Value()
    17. MsgBox(CellValue)
    18. oSheet = Nothing
    19. oBook = Nothing
    20. oExcel.Quit()
    21. oExcel = Nothing
    22. GC.Collect()
    23. GC.WaitForFullGCComplete()
    24. Catch ex As Exception
    25. Dim TryReport As New EBL.Service.TryCatchReport
    26. TryReport.Show("unerwarteter Fehler in EBL.FDO_Export > frm_FDO_Export", ex.ToString)
    27. End Try
    28. Else
    29. cb_output_format.Enabled = False
    30. cb_output_format.Items.Clear()
    31. End If
    32. End Function
    33. End Class



    System:
    System.MissingMemberException: Der öffentliche Member Open für den Typ ApplicationClass wurde nicht gefunden.
    bei Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
    bei EBL_FDOExport.lbl_LayerFile.GetLayerKonvNames() in X:\VB_NET_2015\Projects\tappenbeckja\EBL_FDOExport\EBL_FDOExport\frm_FDO_Export.vb:Zeile 1156.


    Kann mir jemand bei der Fehlermeldung weiterhelfen?

    Gruß Jan
    Es muss

    Visual Basic-Quellcode

    1. ​oExcel.Workbooks.Open


    heißen.
    Du kannst in Visual Studio unter Verweise auch Excel.Interop hinzufügen, dann kannst du auch EarlyBinding verwenden und hast IntelliSense zur Verfügung.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Man kann die Daten aus Excel auch wie aus ner "normalen" DB holen. Gibt's nen ConnectionString dafür und nen SELECT Befehl. Wenn du magst such ich dir den Code raus. Hab das neulich erst gemacht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich hab diverse Projekte parallel am laufen, mal nehme ich C# mal VB.NET.
    Der Code ist in dem Fall in C#, sorry hatte ich vergessen. Ist aber nicht schwer den in VB.NET zu übersetzen ;)

    C#-Quellcode

    1. using System;
    2. using System.Data;
    3. using System.Windows.Forms;
    4. using System.Data.OleDb;
    5. namespace Übersetzungstool
    6. {
    7. class ExcelService
    8. {
    9. public DataTable dtFromExcel(string sPfad)
    10. {
    11. string sSheetToImport = "NameTabellenblatt";
    12. string sStatement = "SELECT * FROM [" + sSheetToImport + "$]";
    13. DataTable dtUebersetzungen = new DataTable();
    14. dtUebersetzungen.TableName = "Uebersetzungen";
    15. OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + sPfad + "; Extended Properties= Excel 8.0;");
    16. OleDbDataAdapter adapter = new OleDbDataAdapter(sStatement, con);
    17. try
    18. {
    19. adapter.Fill(dtUebersetzungen);
    20. }
    21. catch(Exception ex)
    22. {
    23. MessageBox.Show("Fehler: "+ ex.Message);
    24. return null;
    25. }
    26. return dtUebersetzungen;
    27. }
    28. }
    29. }


    ​p.s.
    Code lässt sich sicher optimieren mit SqlCommandBuilder, using und co.
    ​Da hatte ich aber keinen bock drauf weil das nur für nen kleines Übersetzungstool von mir war ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Moin !

    hast Du noch ein Beispiel für das Abfragen einer Zelle?

    und gehe ich recht in der Annahme, dass hinter Extended Properties die Nummer aus der Auflistung von Mono eingetragen wird?

    Gruß Jan

    PS: trotz meines Verweis und der Ergänzung der Zeile

    Visual Basic-Quellcode

    1. Imports Microsoft.Office.Interop

    bekomme ich weiterhin die Fehlermeldung aus meinem Startposting.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jan99“ ()

    Hallo @jan99

    Wegen dem Fehler:
    Bist du dir sicher das du die Zeile richtig ergänzt hast?

    Wegen den "Extended Properties" siehe hier:
    Microsoft ACE OLEDB 12.0 connection strings

    Als Beispiel für Excel und .net, schau dir dieses mal an:
    Basics of using Excel automation in VB.NET with emphasis on creating and destroy

    Gruss