Hellihello Vinzenz,
dafür würde ich den Windows Scripting Host mit JScript/VB-Script oder
gleich Excel-VBA nutzen.
Ja, da war ich auch schonmal dran vorbeigekommen. Die Befehle sind ja im Grund auch ident. Ich hatte nun eben damit mal gespielt, weil der Excel_Spreadsheet_Reader bei einer aktuellen Tabelle nicht wirklich zuverlässig funktionierte. Nach einer (!) Änderung in einer Zelle, konnte er plötzlich nichts mehr lesen. Schad, denn das könnte man ja dann auf dem Server laufen lassen. Anwenderin lädt Excelliste hoch und schwupp, alles fertig.
Mit VBA hatte ich auch schon mal was probiert. Da sah das dann so aus:
Sub SaveCSV1()
Dim Bereich As Object
Dim Zeile As Object
Dim Zelle As Object
Dim strTemp As String
Dim Pfad As String
'Const Pfad As String = "c:\"
Const Dateiname As String = "Produktliste_delimited_meine"
Const Extension As String = ".CSV"
Const Trennzeichen As String = "###"
Const Kapselzeichen As String = """"
Pfad = ActiveWorkbook.Path & "\" 'aktueller Pfad des Dokumentes zzgl Backslash
' weiss nicht, wie sub aufrufen
UnixSekunden = DateDiff("s", CDate(#1/1/1970#), Now)
Dim Quelldatei, Zieldatei As String
Quelldatei = Pfad & Dateiname & Extension ' Namen der Quelldatei festlegen.
Zieldatei = Pfad & Dateiname & "-" & UnixSekunden & Extension ' Namen der Zieldatei festlegen.
DateiDa = Dir(Quelldatei)
If DateiDa > "" Then
FileCopy Quelldatei, Zieldatei ' Quell- in Zieldatei kopieren.
Else
End If
' ende kopieren
'Hier kann auch ein eigener Range angegeben werden
Set Bereich = ActiveSheet.UsedRange
' Dateihandle #1 öffnen, siehe weiter unten: schreiben, schließen
Open Pfad & Dateiname & Extension For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, Trennzeichen) > 0 Then 'angepasst T.Ramel
'Zellen, die ein Trennzeichen beinhalten in Kapselzeichen setzen
strTemp = strTemp & Kapselzeichen & CStr(Zelle.Text) & _
Kapselzeichen & Trennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & Trennzeichen
End If
Next
strTemp = Left(strTemp, Len(strTemp) - 3) & "***" 'angepasst T.Ramel und R sauer
Print #1, strTemp
strTemp = ""
Next
Close #1
' Bereich wieder freigeben (Ressourcen schonen)
Set Bereich = Nothing
End Sub
Function FileThere(FileName As String) As Boolean
FileThere = (Dir(FileName) > "")
End Function
Ein eigenes wasserdichtes "C"SV sozusagen. Ich hatte damals auch so grundsätzlich gedacht: willst aus Excel (Propiretär) raus, musste VBA (proprietär) nehmen.
Mein Problem, so meine ich mich jetzt - nicht nochmal getestet - zu erinnern war, dass Zellen nach ca. 1000 Zeichen abgeschnitten werden. Das hatte ich vorhin auch mal angedacht, das nochmal zu testen und dann entsprechend zu posten, wie diese 1000-Zeichen-Beschränkung aufgehoben werden kann.
Das macht Excel übrigens auch, wenn man per C# und ODBC zugreift. Da hilft dann aber, in den ersten 8 Zeilen in der entsprechenden Spalte dann langen Text zu platzieren.
dann braucht man den Anwenderinnen nichts zu geben als ein Knöpfchen oder eine Verknüpfung.
Ja, das hatte ich mal in Word gemacht: Ein Smiley in der Menüzeile, und das Makro scnhurrte los.
Dank und Gruß,
frankx