Ein neues Projekt erstellen, welcher Weg ist zielfürend

  • VB.NET

Es gibt 76 Antworten in diesem Thema. Der letzte Beitrag () ist von blam.

    Dann ist es aber falsch, sName, eName, sKonto, eKonto etc. in die Vorlage zu packen.
    Sondern das ist eine eigene Tabelle, ja tatsächlich die Ziel-Tabelle, in der die vielen Excel-Sheets ja eingelesen werden sollen (mit Hilfe der Sheet- und Column-Info der jeweils anwendbaren Vorlage).
    Ich bastel mal, wie ich mir das derzeit vorstelle (das ändert sich ja auch andauernd)

    So. Zunächstmal müssen ColumnMappings angelegt werden.
    Das sind ein paar Datensätze, die die Spalten deiner Zahlung-Tabelle benennen.
    Dann wie gesagt der Vorlage->Sheet->Column - View.
    Es muss aber ein Vorlage->Sheet->Column<-ColumnMapping - View sein - also im Column-Grid muss eine ComboboxColumn eingebaut werden, mit der man ein ColumnMapping aussuchen kann.
    Auf diese Weise wird eine xlsColumn einer dtsColumn zugeordnet (die xlsColumn wird auf die dtsColumn "gemappt").

    (Wie gesagt: Wenn die ExcelWorkbooks einfach aufgebaut sind, sodass jeweils immer nur genau ein Sheet auszuwerten ist, dann kann die Sheet-Tabelle entfallen. Der Sheet-Name wird dann einfach als Spalte in Vorlage geführt)

    Dann hab ich noch die ExcelFile-Tabelle erfunden - in die werden die Fullnames der ExcelFiles eingelesen - aus dem Dateisystem.
    Jedem ExcelFile muss eine Vorlage zugewiesen werden (ComboboxColumn).
    Das kann (später) u.U. auch automatisch geschehen, wenn die ExcelFiles in gesonderten DateiOrdnern liegen, wo jeder Ordner für eine Vorlage vorgesehen ist.
    Oder wenn es zum Einlesen einen Dialog gibt, wo man eingeben kann: "Diese Files sind alle für diese Vorlage bestimmt".

    Jo, also wenn alle Vorlagen gebastelt, gespeichert, aus xml.Datei geladen sind, und ein Schwung ExcelFiles eingelesen ist, und je einer Vorlage zugeordnet, dann kann ein Algo die ExcelFiles durchgehen, und je ExcelFile die Columns der zuständigen Vorlage, und kann mit den Informationen zuverlässig korrekte Zahlung-Datensätze generieren.

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ja gesehen und jetzt gerade mit der Umsetzung begonnen. Zwischenzeitlich bin ich mit meiner Arbeit soweit fortgeschritten, dass ich um einen prüfenden Blick dankbar bin.
    Bilder
    • DataSet.jpg

      65,92 kB, 984×520, 150 mal angesehen
    • View.jpg

      166,92 kB, 1.717×731, 49 mal angesehen

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

    Herausforderung?
    Du brauchst doch nur noch ein dgv für ColumnMapping dazu-schmeissen, und dann kannste das Form doch schon anzeigen (mit F5).
    Und dann gibste im ColumnMapping-dgv ein paar ColumnMappings ein.
    Und dann im Vorlage-dgv ein paar Vorlagenamen.
    Und dann im Sheet-dgv ein paar SheetNamen.
    und dann im Column-dgv ein paar ColumnNamen.
    Bei letzterem kannste dann in der ComboboxColumn ein ColumnMapping für die Column aussuchen.

    Wenn das geht, dann gehts.

    Danach kommt Form-Layout, weil dein Form sieht ja scheusslich aus.
    Oder wir machen speichrn/laden - das muss ja auch mal sein.

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

    Ich werde mich nächste Woche um Laden und Speichern kümmern.

    So! Ich habe nach einigen Versuchen betr. Laden und Speichern am Layout gearbeitet. Sieht schon richtig gut aus. :)
    Bei meinen Versuchen mit Laden und Speichern gelang es mir, dass mittels OleDbConnection und OleDbDataAdapter der Spalteninhalt eines Excel ins SheetDataGridView abgefüllt wird. Je länger ich mich aber damit beschäftigt habe, bin ich nicht sicher, ob ich das DataSet1 richtig verstanden habe.Deshalb nochmals so, wie ich es verstehe: "ExcelFile" hier werden die Namen der Files (verschiedene Excel) unter FullName angezeigt. Unter "Sheet" werden die verschiedenen Sheets mit Name unter Name angezeigt. In "Column" werden die Spaltenüberschriften des unter "Sheet" ausgewählten Tabellenblatts in xlsColName aufgelistet. Hier kann ich dann unter "ColumnMapping" die Spalten aus "dtsColName" zuordnen. Habe ich das richtig verstanden? Wenn ja, wird dann mit Vorlage bestimmt, welche Spaltennamen via dtsColName unter "ColumnMapping" zur Verfügung stehen? ?(
    Bilder
    • View4.jpg

      57,36 kB, 1.509×607, 37 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „blam“ ()

    (Komisch, dass ich den post nicht mitbekommen hab)

    blam schrieb:

    Bei meinen Versuchen mit Laden und Speichern gelang es mir, dass mittels OleDbConnection und OleDbDataAdapter der Spalteninhalt eines Excel ins SheetDataGridView abgefüllt wird.
    Hmm - 3 Posts weiter oben empfahl ich, händisch die Sheet-.Namen ins Sheet-Grid einzutragen.
    Nun füllst du iwelche Excel-Inhalte da rein - wes zweckes zu?

    Auch komisch, dass du beim Thema "Laden und Speichern" auf diesen Excel-Import verfällst. Ich hab ja Tut verlinkt, und was da unter "Laden und Speichern" verstanden wird hat ja mit Excel nichts zu tun.
    Sondern deine händischen eingaben (s.o.) ins Dgv und somit ins Dataset sollen per Dataset.WriteXml auf Platte getan werden - du willst das ja nicht bei jedem Programmstart erneut alles eingeben müssen.
    Ein OleDbDataAdapter hat da nix verloren.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @blam

    ich glaube du machst dir das ganze unötig schwer, die kannst eine ExcelDatei und eine bestimmte
    Tabelle daraus als "Linked Tabelle" in Access Importieren.
    Somit hättest du alle Daten mitsamt Spaltennamen.

    wenn einmal verlinkt kannst du mit SQL die Daten auswählen

    hier ein Bsp. eine ExcelTabelle mit Access zu verbinden
    mit DAO oder mit ADOX den Link herzustellen spielt dabei keine rolle

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Office.Interop.Access.Dao
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine()
    6. Dim AccessDatabase As Microsoft.Office.Interop.Access.Dao.Database
    7. Dim AccessTableDef As Microsoft.Office.Interop.Access.Dao.TableDef
    8. Try
    9. AccessDatabase = AccessDatabaseEngine.OpenDatabase("D:\DbExcelVorlagen.accdb")
    10. AccessTableDef = AccessDatabase.CreateTableDef("tbl_xyzVorlage")
    11. AccessTableDef.Connect = "Excel 12.0 XML;HDR=YES;IMEX=1;DATABASE=D:\Test.xlsx"
    12. AccessTableDef.SourceTableName = "Tabelle1$"
    13. AccessDatabase.TableDefs.Append(AccessTableDef)
    14. Catch ex As Exception
    15. MessageBox.Show(ex.Message)
    16. Finally
    17. AccessDatabase.Close()
    18. End Try
    19. End Sub


    hier noch ein Image


    @Kasi: Ich glaub, dir ist die Problemstellung dieses Threads nicht richtig klar:

    ErfinderDesRades schrieb:

    Ist das richtig, dass es darum geht, aus Excel-Workbooks verschiedener Art Transaktions-Datensätze auszulesen, und in ein einheitliches Format zu überführen?

    blam schrieb:

    Ja genau darum geht es.
    Und das "einheitliche Format" ist die Tabelle Zahlungen im typDataset.
    Jo, dann kannste nun eine DateiSuche programmieren, die auf Knopfdruck die Excel-Files deiner Kunden nach ExcelFile einliest.

    Beim Anlegen von ExcelFile-Datensätzen muss immer auch eine VorlageRow angegeben werden.
    Ist jetzt die frage, wie du das konzipieren willst.
    Schnucklig wäre zB, wenn man Vorlage erweitert um eine Spalte EinlesenVon, sodass man zu jeder Vorlage einen Ordnerpfad angeben kann, aus dem die ExcelFiles eingelesen werden sollen.
    Dann verteilst du die Excel-Dateien deiner Kunden in richtiger Weise in diese Ordner, und damit ist die Zuordnung von ExcelFiles zur jeweiligen Vorlage gegeben.

    Danach kannste dann mit dem Algo anfangen, der die Tabelle Zahlungen befüllt.
    ExcelFile ist eine Tabelle in deim Dataset - guck bitte nochmal nach.
    "Excel-Files" ist Plural, und damit sind Files gemeint, mehrere. Welche durch Excel erstellt wurden. Welche deine Kunden dir zugesandt haben.

    .

    blam schrieb:

    ist damit gemeint, dass der Pfad oder der Dateiname oder das ganze File eingelesen wird?
    Guck dein Dataset an. Welche Spalten hat die Tabelle ExcelFile? (es ist ja nur eine, die anderen sind Schlüsselspalten)
    Was kann man in diese Spalte einlesen?