frankx: Wahl der geeigneten Programmiersprache

Beitrag lesen

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