Excel-Import typDTS

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    Excel-Import typDTS

    Mahlzeit.

    Ich muss für mein Programm einen Excel-Import ermöglichen, allerdings OHNE zusätzliche Software auf den Rechnern installieren zu müssen.
    Damit fällt OleDB und JetDB leider weg. Gibt's noch eine andere Möglichkeit das sauber durchzuführen?

    Aktuell mach' ich das wie folgt:

    VB.NET-Quellcode

    1. Private Sub FillTempTableFromExcel(import As String)
    2. Using excelCon = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source='" & import & "'; " & "Extended Properties='Excel 12.0;HDR=YES;IMEX=1;'")
    3. excelCon.Open()
    4. Using da = New OleDbDataAdapter("Select [Datum],[Li#-Kunde#Nummer] As LiKundeNr,[Tour#Nr] As TourNr,[Picks],[Positions-Anzahl] As Pos,[Ersteller#Info] As Ersteller,[Umsatzart] From [Tabelle1$]", excelCon)
    5. da.Fill(Dts.KennzahlenTemp)
    6. End Using
    7. End Using
    8. End Sub


    klappt bei mir am PC wie es soll, auf dem Firmenrechner jedoch nicht, daher brauch' ich da eine andere Lösung:


    gibt's da was, oder muss die access-runtime überall drauf?
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Spekulatius: Probier mal das Nuget-Paket exceldatareader.dataset
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    vermutlich könnte auch dieses helfen: OleDbConnection.Open() wirft Exception
    Also die Lösung läuft darauf hinaus, iwie herauszufinden, welcher der beiden OleDbProvider auf dem Zielrechner installiert ist.
    Und wenns halt mittm TryCatch-Retry ist.
    Dann aber das Resultat in den Settings merken, damit man nicht bei jedem Aufruf erneut zweimal versuchen muss.
    Abhängig von der VS Version sind das nur ein paar Klicks:
    Rechtklick auf References bringt dir das Menü:


    Und wenn du dann das eintippst was die @VaporiZed vorgeschlagen hat, kommt das bei raus:


    Nur noch auf Installieren klicken, und schon kannste damit arbeiten.
    Auf deren GitHub Webseite gibts auch ein kleines How-to.
    Jo, das hatte ich bereits hinbekommen. So wie ich das verstehe, wird mir mit dem Einlesen der Excel-Files ein neues DataSet generiert, was ich aber ja nicht brauche weil
    ich ja schon eine typisierte Tabelle habe, wo die Daten rein sollen (auch nicht alle Spalten sollen da rein)


    ErfinderDesRades schrieb:

    Und wenns halt mittm TryCatch-Retry ist.


    Wie stellst du dir das vor? Wenn's für OleDB ne Exception gibt, dann mit JetDB probieren?
    Soweit ich das getestet hatte, geht beides auf meinem Firmenrechner nicht. Der ist offen, weil ich Teamleiter bin - ich kann da also alles installieren
    aber auf die anderen PC's leider nicht :(
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:

    tragl schrieb:

    Jo, das hatte ich bereits hinbekommen. So wie ich das verstehe, wird mir mit dem Einlesen der Excel-Files ein neues DataSet generiert, was ich aber ja nicht brauche weil
    ich ja schon eine typisierte Tabelle habe, wo die Daten rein sollen (auch nicht alle Spalten sollen da rein)


    Ich kenne exceldatareader.dataset den @VaporiZed vorgeschlagen hat nicht, sieht allerdings ganz gut aus. Es gäbe dann noch EPPlus, auch über Nuget zu installieren, ich empfehle aber aus lizenrechtlichen Gründen die Version 4.5.3.3 zu installieren. EPPlus benötigt zum Lesen oder Schreiben von Excel-Dateien nicht einmal ein installiertes Excel auf dem jeweiligen Rechner! Du kannst hier auf fast gleicher Weise wie beim exceldatareader.dataset die Tabellen einlesen. Bei EPPlus bist Du nicht gezwungen die Daten in ein Dataset einzulesen, kannst es aber auch.
    Hier mal eine Seite, die sich damit beschäftigt und wo die Daten auch selektiv eingelesen werden. Anosnsten google ein bischen, da gibt es wirklich sehr viel Dokumentation im Netz.
    So ganz verstehe ich Deinen Einwand mit dem Dataset aber dennoch nicht. Die erste Hürde ist es ja, eine Excel-Tabelle in den Arbeitsspeicher zu bekommen, ohne OleBD, ohne InterOp und bei EPPlus sogar ohne Excel selbst.
    So eine nicht typisierte Datatable in einer Schleife zu verwursten (z.B. in eine streng typisierte Datatable zu überführen) sollte doch das geringste Problem sein.

    Dksksm schrieb:

    So eine nicht typisierte Datatable in einer Schleife zu verwursten (z.B. in eine streng typisierte Datatable zu überführen) sollte doch das geringste Problem sein.

    Ja, das krieg' ich hin - mein Gedanke war, das ohne "Zwischentabelle" zu lösen, weil die typisierte Table dazu schon eigentlich eine Zwischentabelle ist ;)
    Dann zieh ich die Daten eben aus Excel in eine New DataTable und selektier' daraus in meine typisierte Table rein - wird schon klappen, ich spiel' mich am WE mal ein bisschen damit rum
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: