Martex Geschrieben 26. Mai 2003 Teilen Geschrieben 26. Mai 2003 Moin Jungs, mein chef hat mich mit einer Aufgabe betraut, die ich als nicht-programmierer sehr schwer finde. Folgendes Problem: Ich habe eine Textdatei, die aus unserem Datenbankprogramm (baan, falls das einer kennt) heraus erzeugt wurde und auf unix abgespeichert wird (diese Datei ist quasi das Ergebnis eines Queries), per samba hol ich mir die in Exel rein und formatier die so ein bisschen, damit ich nachher eine richtige Exceltabelle mit überschriften habe. (z.b. Kundennummer, Artikel etc....) Jetzt wirds schwer: Die Datei, die aus baan heraus erzeugt wird, hat meinetwegen 10 Spalten. Chef will, wenn er in baan eine zusätzliche spalte bzw ein Feld einfügt (die dann natürlich auch in der erzeugten Datei auftaucht), dass das Makro dann klug genug ist, zu merken, dass die datei eine Spalte mehr hat, sie an der korrekten Stelle (also nicht z.b immer hintendran gehangen) einzufügen und die korrekte überschrift zu setzen. Er hat mir den tip gegeben, die zeilen und spalten zu zählen, und den wert in zwei variablen zu schreiben. Aber was mach ich dann damit?? Wäre super, wenn mir da einer helfen könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 26. Mai 2003 Teilen Geschrieben 26. Mai 2003 hi, hilft dir das evtl? hth Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Martex Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 nee, nicht wirklich. Hier mal der Anfang des Makros: Problem ist immer noch: Wenn in der Quelldatei Spalten dazukommen, soll das Makro es merken, in der zu erstellenden exceltabelle an der richtigen stelle eine spalte einfügen, datumsformat setzen etc etc (die formatierungen sind nicht so wichtig, hauptsache, ich kapiere die logik . '*Datei öffnen und formatieren z.B.: Trennzeichen, Array(Nummerierung, option 1:standard 4:datum Workbooks.OpenText FileName:="Z:\auswertungen\gesamt_teil2", Origin:= _ xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _ , Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _ ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 4), Array _ (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _ Array(27, 1)) '*Alles selektieren, sortieren nach spalte A, B und C Cells.Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _ Key2:=Range("B1"), Order2:=xlAscending, _ Key3:=Range("C1"), Order2:=xlAscending, _ Header:=xlGuess '*Alles zählen, um Datenmenge klein zu halten, Anzahl der Daten in Spalte A in Variable-> Anzahl * Range("AB1").Formula = "=COUNT(A:A)" ANZAHL = Range("AB1").Value + 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 --> Verschoben: Delphi/VB/VBS/AS 400/C#/.net/Sonstige Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maxim_42 Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Ich weiss natürlich nicht ob ich die Aufgabe richtig begriffen hab. Beziehst du die Spaltenüberschriften auch aus der Textdatei? Ich mach mal 'nen Versuch. Der enfachste Ansatz könnte so aussehen: In einer Schleife bis Dateiende -- Schleife bis zum Zeilenumbruch ---- Zeichenkette bis zum nächsten Separator ( oder Zeilenumbruch) lesen ---- Gelesenes in das nächste Excel-Feld schreiben -- Schleife Ende -- Nächste Zeile in Excel Schleife Ende Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Martex Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 Tut mir leid, das verstehe ich nicht. So sieht die Datei aus, die von baan erzeugt wird und unter unix abgelegt wird, die ich mir dann in Excel reinhole. VK |Pos|PA-Best|Kunde |Pr|Di|AA|A|S|Wert-E|PAS|VK-Liefd|PA-Liefd|Start-AG|End-AG |End-Abt |DruckDat| xxxxxx| 50| 0 |geheimxx|xx|mr|Di|F| | x xxxx| 0|xx.xx.xx| | | | | | Der header wird mit eingelesen (siehe Makrotext oben) Der wird halt zu den Überschriften. Ich habe mir überlegt, dass das Makro links anfängt zu gucken, ob die Spalte 1 in excel die überschrift "VK" hat, dann auf Spalte zwei schwenkt, guckt, ob "Pos" da ist... usw, bis mal eine sache nicht stimmt, dann an der stelle eine neue spalte einfügt, also die, die in der unix datei neu dazugekommen ist. dann die neue spalte einliest..... geht das??? Problem ist dann wohl nur, wenn ich mal eine Spalte aus der quelldatei herausnehme, bricht er wahrscheinlich ins essen... glaub ich.. Ihr seht, ich bin da nicht so versiert. Bitte helft mir, mein Chef guckt schon so komisch... Grüße, M Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 hi, ok, zum mitdenken für mich: soll die excel-tabelle erweitert werden, oder mit jeder datei eine neue tabelle erstellt werden? bei neuen tabellen funktioniert der ansatz (s. link oben) ganz gut. wenn die bestehende excel-tabelle erweitert werden soll, müsste man die spaltenüberschriften abgleichen und erst die tabelle erweitern / reduzieren um danach den ansatz von oben durchexerzieren. allerdings darf man dann nicht mit der zelle A1 beginnen sondern mit der zelle in der ersten spalte in der letzten+1 spalte zeile. hoffe, das war versändlich, ansonsten fragen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Martex Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 Original geschrieben von Peregrin hi, ok, zum mitdenken für mich: soll die excel-tabelle erweitert werden, oder mit jeder datei eine neue tabelle erstellt werden? -Ersteres ist der Fall- bei neuen tabellen funktioniert der ansatz (s. link oben) ganz gut. wenn die bestehende excel-tabelle erweitert werden soll, müsste man die spaltenüberschriften abgleichen -mit was ?- und erst die tabelle erweitern / reduzieren um danach den ansatz -welchen jetzt?- von oben durchexerzieren. allerdings darf man dann nicht mit der zelle A1 beginnen sondern mit der zelle in der ersten spalte in der letzten+1 spalte zeile. -Ich glaube so langsam, ich bin zu dumm dafür... zum Glück bin ich kein AE geworden. Mal im Ernst: Erklär es mal für ganz doofe (ok, du bist dau abwimmler, aber mach bitte ne ausnahme) So nach dem Motto, - Lese die Datei ein und formatiere sie, - zähle die zeile und schreibe sie in die variable anzahl - ... Danke! M hoffe, das war versändlich, ansonsten fragen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maxim_42 Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Eine Vorgehensweise um die Überschriften in die richtige Reihenfolge zu bringen: Option Explicit Dim strTxtUeberschriften(100) As String Dim strExcelUeberschriften(100) As String Dim strResUeberschriften(100) As String Private Sub Form_Load() Dim i As Integer Dim j As Integer Dim g As Integer Dim iSpaltenIndex As Integer Dim bGefunden As Boolean iSpaltenIndex = 0 strTxtUeberschriften(0) = "eins": strTxtUeberschriften(1) = "zwei" strTxtUeberschriften(2) = "drei": strTxtUeberschriften(3) = "vier" strTxtUeberschriften(4) = "fuenf" strExcelUeberschriften(0) = "null": strExcelUeberschriften(1) = "eins" strExcelUeberschriften(2) = "drei": strExcelUeberschriften(3) = "vier" strExcelUeberschriften(4) = "sechs" For i = LBound(strResUeberschriften) To UBound(strResUeberschriften) If strTxtUeberschriften(i) = "" Then Exit For bGefunden = False For j = LBound(strExcelUeberschriften) To UBound(strExcelUeberschriften) If strExcelUeberschriften(j) = "" Then Exit For If strTxtUeberschriften(i) = strExcelUeberschriften(j) Then ' An dieser Stelle müssen alle Excel-Überschriften, die noch nicht in' ' strResUeberschriften übernommen wurden und vor der gefundenen stehen,' ' behandelt werden.' ' Schon ausgewertete Überschriften werden mit "#####" überschrieben' For g = 0 To j - 1 If strExcelUeberschriften(g) <> "#####" Then strResUeberschriften(iSpaltenIndex) = strExcelUeberschriften(g) Debug.Print iSpaltenIndex, strResUeberschriften(iSpaltenIndex) iSpaltenIndex = iSpaltenIndex + 1 strExcelUeberschriften(g) = "#####" End If Next strResUeberschriften(iSpaltenIndex) = strExcelUeberschriften(j) strExcelUeberschriften(j) = "#####" Debug.Print iSpaltenIndex, strResUeberschriften(iSpaltenIndex) iSpaltenIndex = iSpaltenIndex + 1 bGefunden = True Exit For End If Next If Not bGefunden Then strResUeberschriften(iSpaltenIndex) = strTxtUeberschriften(i) Debug.Print iSpaltenIndex, strResUeberschriften(iSpaltenIndex) ' An dieser Stelle neue Spalte ins Excel-Sheet einfügen' iSpaltenIndex = iSpaltenIndex + 1 End If Next 'Zum Schluss die Excel-Überschriften hinter der letzten txt-Überschrift.' i = 0 While strExcelUeberschriften(i) <> "" If strExcelUeberschriften(i) <> "#####" Then strResUeberschriften(iSpaltenIndex) = strExcelUeberschriften(i) Debug.Print iSpaltenIndex, strResUeberschriften(iSpaltenIndex) iSpaltenIndex = iSpaltenIndex + 1 End If i = i + 1 Wend End Sub [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.