Ein neues Projekt erstellen, welcher Weg ist zielfürend

  • VB.NET

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

    VB.NET-Quellcode

    1. Dim Files As String() = Directory.GetFiles("C:\Temp\VB\Zahlungen")
    2. Dim file As As String = Files.ToString]Dim Files As String() = Directory.GetFiles("C:\Temp\VB\Zahlungen")
    3. Dim file As As String = Files.ToString


    So kann ich die Files auslesen um weiter damit zu arbeiten. Bin aber nicht sicher ob das der richtige Weg ist...
    ah - jetzt dämmerts, du fragst, ob die zeile in post#45 ein Ansatz sei, um ein Directory nach *.xlsx-Files zu durchsuchen.
    Ja, so eine ähnliche Zeile wird auch vorkommen müssen.
    Und noch mehr Zeilen.
    Und eine Schleife. Und ExcelFile-Datensätze müssen in der ExcelFile-DataTable angelegt werden.

    aber was du vor allem und als allererstes brauchst ist eine Methode. Schreib eine Methode.
    Und die soll so heissen wie das was sie tun soll.
    So schaffe ich es die Files bzw. deren Namen in einer ListBox abzulegen. Bin mir aber nicht sicher, ob das der richtige Ansatz ist.

    VB.NET-Quellcode

    1. Private Sub OrdnerAuslesen(ByVal path As String)
    2. For Each foundFiles As String In My.Computer.FileSystem.GetFiles(path)
    3. ListBox1.Items.Add(foundFiles, "*xlsx")
    4. Next
    5. End Sub
    6. Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem.Click
    7. OrdnerAuslesen("C:\Temp\VB\Zahlungen")
    8. End Sub


    Bis jetzt schaffe ich es nicht, foundFiles in DataSet1.ExcelFileDataTable abzufüllen...
    Echt nicht?
    Hmm, dann solltest du mal ganz sorgfältig dieses Tut studieren:
    codeproject.com/Articles/10351…ped-Dataset-for-Beginners
    Da lernst du, wie man mittm ObjectBrowser sein typisiertes Dataset untersuchen kann, und herausfindet, welche typisierten Methoden alle angelegt wurden.
    Ganz zentral die AddXXX-Methode (mehrfach überladen), und welche Überladung die sinnreichste ist, um codeseitig Datensätze anzulegen.
    So findest du diesen Ansatz:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports MyRootNamespace.DataSet1
    3. Private Sub OrdnerAuslesenFuerVorlage(path As String, rwVorlage As VorlageRow)
    4. For Each fullname In Directory.GetFiles(path, "*.xlsx") 'my.Computer ist Müll (schon weils im Objectbrowser nicht dokumentiert ist) - nimm Framework-Methoden
    5. ExcelFile.AddExcelFileRow(rwVorlage, fullname)
    6. Next
    7. End Sub
    Du brauchst also die VorlageRow, sonst kannst du eine ExcelFileRow nicht zufügen - logischerweise (oder ist dir das (noch) nicht logisch?)
    Aber es kommt noch besser.
    Die VorlageRow - du hast ja bekanntlich schon einige angelegt - die kannste sogar aus dem pfad ableiten, wenn du deine Pfade sinnreich benennst, entsprechend deiner Vorlagen:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports MyRootNamespace.DataSet1
    3. Private Sub KundeOrdnerAuslesen(path As String)
    4. Dim di = New DirectoryInfo(path) 'DirectoryInfo, FileInfo - wichtige Klassen!!
    5. Dim kundeName = di.Name
    6. Dim rwVorlage = myDataset1.Vorlage.First(Function(rw) rw.Name = kundeName)
    7. For Each fi In di.GetFiles("*.xlsx") ' (as FileInfo)
    8. ExcelFile.AddExcelFileRow(rwVorlage, fi.Fullname)
    9. Next
    10. End Sub
    11. Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StartToolStripMenuItem.Click
    12. KundeOrdnerAuslesen("C:\Temp\VB\Zahlungen\KundeA")
    13. End Sub
    (du siehst, wie wichtig Methoden sind - ohne das kann ich gar keinen sinnvollen Vorschlag machen)

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

    Der Objektkatalog ist sehr interessant und umfangreich! Noch mehr Infos und Wissen, welches man kennen müsste... Werde sicher noch ausgibig damit arbeiten.

    Wenn ich deinen Ansatz für "OrdnerAuslesenFuerVorlage" richtig verstehe, sind meine Vorlagen als xlsx-Files in einem Ordner, deren fullnames ausgelesen werden

    ErfinderDesRades schrieb:

    For Each fullname In Directory.GetFiles(path, "*.xlsx")


    Und mit

    ErfinderDesRades schrieb:

    ExcelFile.AddExcelFileRow(rwVorlage, fullname)
    werden diese Vorlagen in mein VorlageDataGridView abgefüllt. Stimmt das so?
    lies beides aus ExcelFile und Tabelle(n) die in dieser vorhanden sind

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Data.OleDb
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. Dim di As New DirectoryInfo("D:\Excelfolder")
    6. Dim ExcelFiles As FileInfo() = di.GetFiles("*.xls*")
    7. Dim fi As System.IO.FileSystemInfo
    8. For Each fi In ExcelFiles
    9. Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fi.FullName & ";Extended Properties='Excel 12.0 Xml;HDR=YES'")
    10. con.Open()
    11. Dim sheets As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    12. For Each sheet As DataRow In sheets.Rows
    13. Dim tableName As String = sheet("TABLE_NAME").ToString()
    14. Debug.WriteLine(fi.FullName & ";" & tableName)
    15. Next
    16. End Using
    17. Next
    18. End Sub
    19. End Class

    blam schrieb:

    Wenn ich deinen Ansatz für "OrdnerAuslesenFuerVorlage" richtig verstehe, sind meine Vorlagen als xlsx-Files in einem Ordner, deren fullnames ausgelesen werden

    ErfinderDesRades schrieb:

    For Each fullname In Directory.GetFiles(path, "*.xlsx")
    Nein, deine Vorlagen sind nur Datensätze in deim Dataset.
    Deine Vorlage-Datensätze sind keine Excel-Files, und werden auch nicht aus Excel-Files eingelesen.
    Deine Vorlage-Datensätze musst du einmalig händisch eingeben, und abspeichern. Dann können sie aus der Dataset.xml-Datei gelesen werden. Aus einer! Alle Vorlagen aus einer Datei! Überhaupt alle Datensätze aus nur einer Datei!
    Nämlich aus der Dataset.xml-Datei!! Es ist eine xml-Datei!! Es ist keine Excel-Datei!!
    Datensätze: xml-Datei!! Nicht!!: Excel-Datei!

    blam schrieb:

    Und mit

    ErfinderDesRades schrieb:

    ExcelFile.AddExcelFileRow(rwVorlage, fullname)
    werden diese Vorlagen in mein VorlageDataGridView abgefüllt. Stimmt das so?
    Nein.
    Die Zeile legt einen ExcelFile-Datensatz an - der genaue Datentyp des Datensatz-Objektes lautet: ExcelFileRow. Deswegen heisst die Methode: .AddExcelFileRow()
    Hmm - das hast du schoma besser gewusst:

    ErfinderDesRades schrieb:

    @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.

    Zahlungen ist die Tabelle, wo in einheitlichem Format die per Excel-Sheet uneinheitlich angelieferten Zahlungs-Informationen deiner Kunden letztendlich landen sollen.
    Ich befürchte, wir reden nicht vom Gleichen oder ich verstehe dich einfach nicht.
    Wenn doch Zahlungen die Tabelle ist, wo die uneinheitlichen Excel-Sheets meiner Kunden landen sollen, ist das doch die Vorlage. So sollen die uneinheitlichen Excel-Sheets strukturiert bzw. vereinheitlicht werden. Im ColumnDataGridView mache ich die Zuteilung, welche Spalte aus dem Kunden Excel-Sheet zu welcher Spalte von meinem einheitlichen Format Zahlungen gehört. So verstehe ich es zumindest.
    Bilder
    • View3.jpg

      67,04 kB, 1.497×751, 24 mal angesehen
    Vorlage ist eine DataTable.
    Dieser DataTable sind weitere DataTables untergeordnet, deren Datensätze genauere Aussagen dazu machen, wie ein ExcelSheet auszulesen ist, damit ein sinnvoller Datensatz in Zahlungen gebildet werden kann.
    Vielleicht ist Vorlage nicht der beste Name dafür - es handelt sich um komplexe MappingInformationen (welches Blatt, welche Spalten,...), also wie die Daten eines ExcelSheets auf Zahlungen zu mappen sind.

    Zahlungen ist keine Vorlage. Eine Vorlage ist etwas, was man (so ähnlich) nachmacht. Du machst aber keine Zahlungen nach.
    Du willst Zahlung-Datensätze erstellen, aus Excel-Dateien.
    Die Zahlung-Datensätze sollen ein einheitliches Format aufweisen. (Nicht so wie die Excel-Dateien, wo der eine Kunde den Betrag in spalte1 schreibt, und der nächste in Spalte2.)
    Ja und diese Zahlung-Datensätze kannste in der Tabelle Zahlungen ablegen - oder wo willst du damit hin?
    Immerhin verstehe ich den Teil, dass die Daten aus den Kunden Excel-Daten am Ende in der Tabelle Zahlungen abgelegt werden sollen, richtig. :) Um überhaupt in die richtige Richtung zu suchen muss ich den Ablauf verstehen, wie du ihn dir vorstellst... Ich beziehe mich auf mein Bild "Data-Set".

    Vorlage "Name", hier kommt der Kundenname rein, händisch erfasst - ExcelFile "FullName" hier kommt der FullName des ExcelFiles rein, welches sich im vorgegebenen Ordner befindet - Sheet "Name" hier sollen die Namen der verschiedenen Sheets von dem ExcelFile aus dem Pfad "FullName" rein - Column "xlsColName" hier werden die Spaltennamen des jeweiligen Sheets aufgeführt - ColumnMapping "dtsColName" sind die einheitlichen Spaltennamen aus Zahlungen (händisch erstellt) und können unter Column den richtigen Spalten mittels DropDownButton zugeordnet werden.

    Bei mir sieht das jetzt so aus:

    Die ListBox unten rechts ist nur zur Kontrolle... Ich arbeite aber schon mit der Überwachen-Funktion
    ich sehe da nur 4 leere DGVs - keine Ahnung, was die darstellen - nichtmal Spalten-Überschriften.
    Da habich in post#30 mehr erahnen können.
    Ich täte empfehlen, mach jedes DGV in eine Groupbox, und beschrifte sie sinnvoll.
    Hihi - in #31 gebe ich dir bereits ein Tut, wie man mit paar Klicks ein GUI basteln kann, sinnvoll und einigermassen ergonomisch.

    Und tu auch Daten rein.

    was für eine "Überwachen-Funktion"?