knut4linux
Goto Top

Automatisches umwandeln bzw. konvertieren von xls in ein txt format

Beim Datenbankexport in eine TXT-Datei, werden Tabulatoren als "Leerzeichen" dargestellt

Mahlzeit liebe Admins und Script-Gurus....

Ich verzweifel an folgendem Problem (fasse es extrem kurz).

Ich will, mittels einem Datenbankexport, unsere Lagerbestandsliste in eine Textdatei (Tabulatorgetrennt/Tabstopgetrennt) exportieren. Leider sieht es nur optisch so aus, als wären es Tabulatoren. In wirklichkeit sind es Lerrzeichen.
Exporteiere ich meine Daten in ein xls Format (Excelldatei), und speichere diese Datei im Excell selbst dann als Tabulatorgetrennte Datei (TXT), sind es wirklich richtige Tabstops.
Ich vermute, dass es mehr ein Softwareproblem unserer Anwendungssoftware ist.

Daher wollte ich fragen, ob ihr villeicht ne Möglichkeit kennt, wie ich per Taskmanager und einem Script sagen kann, dass er die Excelldatei in eine TXT datei konvertieren soll, ohne dass auch nur eine Officeanwendung nötig ist.

Folger Hintergrund:

- Die exportierte Datei wird auf dem Server (SBS2003) gespeichert
- Eine Batch lädt im stündlichen Intervall diese Datei auf einen entfernten FTP hoch
- In der Datei sind unsere Lagerbestandslisten die in einem Unternehmensnetzwerk via web veröffentlicht werden.

Damit der ganze Spaß auch funktioniert, muss die Datei unbedingt eine txt Datei sein.

Hat jemand von euch ne Idee wie ich das durch reines Scripting lösen kann? Ich will keine extra Software installieren, die diesen Spaß macht.

Vielen Dank im Voraus für eure Hilfe

Gruß,
Knut

Content-ID: 105583

Url: https://administrator.de/contentid/105583

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

60730
60730 09.01.2009 um 13:29:18 Uhr
Goto Top
Servus,

wenn ich deine Zeilen richtig interpretiere, müßte deine Überschrift lauten:

Suche Script um aus einer Textdatei mit fester Spaltenbreite eine CSV Datei zu erstellen?

XLS benutzt du ja nur als zwischenschritt.

richtig?
knut4linux
knut4linux 09.01.2009 um 13:37:35 Uhr
Goto Top
Nein, vielleicht habe ich mich falsch ausgedrückt.

Ich kann ja meine Bestandsliste aus der Datenbank schon in einer txt exportieren. Nur sind die Tabellen dort leider nicht Tabulator getrennt. Bzw, sind sie optisch Tabulatorgtrennt.
Ich will mal versuchen, dass Ding visuell darzustellen.

'# = Tabulator
- = Leerzeichen

Bei einem export, der Daten in eine TXT sieht es so aus:

Daten---------Daten----------Daten

Soll aber so sein:

Daten#Daten#Daten

Jetzt mal so, wie es aufwendig funktioniert.

Datenexport in ein Excellformat speicher -> OK. Excelldatei öffnen, Datei -> Speichern unter ->Dateiname.txt. Ergebniss:

Daten#Daten#Daten

Und genau diesen Schritt, dass Ding jedesmal von einem Excellformat in einer TXT zu konfertieren, will ich mir ersparen.

Verstehst du jetzt was ich meine??
70620
70620 09.01.2009 um 13:56:29 Uhr
Goto Top
Wie exportierst du denn in TXT?
Da wirst du doch sicherlich die Möglichkeit haben das Umzustellen

Alternativ ein Script in Excel, welches per Button die Datei öffnet und neu speichert.. aber ist 1. Arbeit zu Pogrammieren und 2. Ein Zusatzschritt der nicht optimal ist
knut4linux
knut4linux 09.01.2009 um 14:04:40 Uhr
Goto Top
Ich habe keine Möglichkeit, etwas einzustellen wenn ich den export in eine txt mache. Dies wird von dem Layout, in welches gedruckt wird schon vorgegeben. Das Layout habe ich selbst geschrieben. Falls es jemand interessiert oder das wichtig ist, mit Crystal Reports. Das spielt hier aber keine Rolle.

Im Layout sind schon alle Einstellungen festgelegt (Tabulator, Schriftgröße, Schriftart usw)

Alternativ ein Script in Excel, welches per Button die Datei öffnet und neu speichert

wieder ein Schritt mehr, Zeitaufwendig.
Iwan
Iwan 09.01.2009 um 14:43:01 Uhr
Goto Top
hallo,

wenn es im Programm selber die Möglichkeit nicht gibt, das die Trennung mit Tabs statt Leerzeichen geht, dann wirst du wohl im einen weiteren Schritt nicht drum herum kommen
evtl. könnte man das ganze auch mit einem VBS-Skript machen, was die Leerzeichen durch ein Tab ersetzt
bastla
bastla 09.01.2009 um 14:49:33 Uhr
Goto Top
Hallo knut4linux!

Um nochmals TimoBeils Frage aufzugreifen: Wenn der direkte Export "optisch Tabulatorgtrennt" ausssieht, wäre ich auch davon ausgegangen, dass die einzelnen Felder eine jeweils konstante Spaltenbreite haben - den Satz auf dieser Basis zu trennen und die überzähligen Leerzeichen zu entfernen erforderte zB mit einem VBScript nicht viel Aufwand ...

[Edit] ... nämlich etwa so:
FIn   = "D:\Test.txt"  
FOut  = "D:\TestWithTabs.txt"  
ColsW = Array(10,7,8,5,20) 'Spaltenbreiten der einzelnen Felder  
Delim = vbTab 'Trennzeichen im Ergebnis  

UCols = UBound(ColsW) 'Anzahl Spalten ermitteln  
ColsS = ColsW 'Array für Startpositionen der einzelnen Spalten erzeugen  
ColsS(0) = 1 'Vorgabe Startposition des ersten Feldes in der Zeile (nicht null-basiert)  
For i = 1 To UCols 'Startpositionen der übrigen Felder ermitteln  
	ColsS(i) = ColsS(i-1) + ColsW(i-1) 'Startposition abhängig von vorhergehender Startposition  
Next

Set fso = CreateObject("Scripting.FileSystemObject")  
Lines = Split(fso.OpenTextFile(FIn).ReadAll, vbCrLF) 'Daten in Array einlesen  
ULines = UBound(Lines) 'Anzahl der Zeilen ermitteln  

Set FileOut = fso.CreateTextFile(FOut, True) 'Ausgabedatei öffnen (ev bereits bestehende Datei wird überschrieben)  
For i = 0 To ULines 'alle eingelesenen Zeilen einzeln bearbeiten  
    LineOut = "" 'Ausgabezeile initialisieren  
    For j = 0 To UCols 'alle Spalten der Zeile einzeln bearbeiten  
        Field = Trim(Mid(Lines(i),ColsS(j),ColsW(j))) 'Feld aufgrund der Position und Breite einlesen und überzählige Leerzeichen entfernen  
        LineOut = LineOut & Delim & Field 'Feld durch Trennzeichen ("Delim") getrennt an Satz anfügen  
    Next
    If i < ULines Then LineOut = LineOut & vbCrLF 'an alle außer die letzte Zeile eine Zeilenschaltung anfügen, ...  
    FileOut.Write Mid(LineOut, Len(Delim) + 1) '... überzähliges Trennzeichen am Beginn der Zeile entfernen und in Datei schreiben  
Next
FileOut.Close
Damit wird aus
123456789 123456 1234657 1234 12345678901234567890
123456    1236   1       12   123456789012        
12345678  123    1234    123  123456789012345678  
123       123456 123     1234 1234567890
1         1      1       1    1
das:
123456789	123456	1234657	1234	12345678901234567890
123456	1236	1	12	123456789012
12345678	123	1234	123	123456789012345678
123	123456	123	1234	1234567890
1	1	1	1	1
[/Edit]

Grüße
bastla
knut4linux
knut4linux 09.01.2009 um 23:34:56 Uhr
Goto Top
@bastla, vielen Dank. Ich glaube damit könnte ich das wirklich in den Griff bekommen.

werde es am Montag gleich mal testen und berichten.

Danke und schönes WE @ll.
knut4linux
knut4linux 12.01.2009 um 12:20:08 Uhr
Goto Top
@bastla

Dein Script haut genau so hin. *niederkniehend vor dir hinwerf

Danke für alles antworten, bis demnächst face-smile
bastla
bastla 12.01.2009 um 13:16:20 Uhr
Goto Top
@knut4linux
*niederkniehend vor dir hinwerf
Ich freu' mich face-smile ...

... aber brich Dir bitte nix. face-wink

Grüße
bastla
JayjayLee
JayjayLee 24.10.2016 um 17:03:16 Uhr
Goto Top
Hallo, bin über google auf diesen Eintrag gestolpert.
Guter job, hat mich auch ein wenig schlauer gemacht, aber....
Ich habe ein ähnliches Problem, die txt mit Tabulatoren ist immer schön lesbar ausgerichtet (hierbei immer mit Leerzeichen aufgefüllt).
Ich kann leider nicht die Spaltenbreiten fest definieren, diese sind immer unterschiedlich, Beispiel:

2574              	       	     123456	   18,17	EUR    	        1
DR3300            	       	     123456	   93,07	EUR    	      138
LC1000BK          	       	     123456	   14,18	EUR    	        2
ich brauche jedoch:
2574		123456	18,17	EUR	1
DR3300		123456	93,07	EUR	141
LC1000BK		123456	14,18	EUR	2
Eine Besonderheit noch: vor der 123456 kommt noch eine leere spalte, somit habe ich 6 Spalten.
Ist dieser script für meine Zwecke anpassungstauglich?
Vielen Dank im voraus.