Manuelles Speichern im CSV-Format berücksichtigt meine Einstellung in der
Systemsteuerung bezüglich des Listentrennzeichens,
.SaveAs FileFormat:=Excel.xlCSV
in VBA verwendet hingegen stets ein Komma. Bei Google Groups fand ich viele
ältere Postings zu diesem Thema. Ich verwende hier Excel 2003 - ist das
Problem etwa immer noch nicht gelöst?
--
<http://schneegans.de/usenet/mid-schreibweisen/> · Postings richtig verlinken
Christoph Schneegans schrieb am 26.11.2007
> Manuelles Speichern im CSV-Format berücksichtigt meine Einstellung in der
> Systemsteuerung bezüglich des Listentrennzeichens,
>
> .SaveAs FileFormat:=Excel.xlCSV
>
> in VBA verwendet hingegen stets ein Komma. Bei Google Groups fand ich viele
> ältere Postings zu diesem Thema. Ich verwende hier Excel 2003 - ist das
> Problem etwa immer noch nicht gelöst?
Doch - seit xl2002 gibt es den Schalter 'Local:=True', der dann wieder die
lokal eingestellten Trennzeichen berücksichtigt. Näheres in der
Online-Hilfe mit: Cursor in den Begriff 'SaveAs' stellen und F1 drücken.
Excel-VBA 'spricht' ansonsten nur Englisch und nimmt daher auch diese
Trenn- und Dezimalzeichen - IMO logisch, richtig und vor allem auch überall
gleich.
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-2]
Microsoft Excel - Die ExpertenTipps
> Doch - seit xl2002 gibt es den Schalter 'Local:=True', der dann wieder die
> lokal eingestellten Trennzeichen berücksichtigt.
Hm,
Dim sheet As Excel.Worksheet
Set sheet = Excel.ActiveSheet
sheet.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
liefert mir weiterhin Kommata als Trennzeichen. Nur
Dim wb As Excel.Workbook
Set wb = Excel.ActiveWorkbook
wb.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
funktioniert hingegen korrekt mit Semikolon. Seltsam.
--
<http://schneegans.de/usenet/webnews/> · Warum man mit TICKAW nicht posten will
"Christoph Schneegans" schrieb:
> > Doch - seit xl2002 gibt es den Schalter 'Local:=True', der dann wieder die
> > lokal eingestellten Trennzeichen berücksichtigt.
>
> Hm,
>
> Dim sheet As Excel.Worksheet
> Set sheet = Excel.ActiveSheet
> sheet.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
>
> liefert mir weiterhin Kommata als Trennzeichen. Nur
>
> Dim wb As Excel.Workbook
> Set wb = Excel.ActiveWorkbook
> wb.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
>
> funktioniert hingegen korrekt mit Semikolon. Seltsam.
Interessant!
Auf die Idee, ein Worksheet direkt mit SaveAs zu speichern bin ich noch nie
gekommen. ;-)
Vermutlich deshalb weil eine .CSV-Datei eh nicht mehr als ein 'Blatt' haben
kann.
Kopiere das Sheet zuerst - es wird dann gelich eine neue Mappe erstellt -
und speichere diese Mappe dann als .CSV ab.
Oder nutze ansonsten VBA:
Sub SaveCSV_a()
Dim A As Variant
Dim B() As String
Dim D() As String
Dim Z As Long
Dim s As Byte
Dim r As Long
Dim C As Byte
Const Path As String = "C:\Test\"
Const Filename As String = "Test2"
Const Extension As String = ".CSV"
Const Separator As String = ";"
Const Wrapper As String = """"
'Here you can define your own Range, too
A = ActiveSheet.UsedRange
If Not IsEmpty(A) Then
Z = UBound(A, 1)
s = UBound(A, 2)
ReDim D(Z - 1)
For r = 1 To Z
ReDim B(s - 1)
For C = 1 To s
If InStr(1, A(r, C), Separator) > 0 Then
'Rows whith cells including the Separator
'put in Wrapper
B(C - 1) = Wrapper & A(r, C) & Wrapper
Else
B(C - 1) = A(r, C)
End If
Next C
D(r - 1) = Join(B(), Separator)
Next r
Open Path & Filename & Extension For Output As #1
Print #1, "sep=" & Separator & vbCrLf & Join(D(), vbCrLf)
Close #1
End If
End Sub
--
Mit freundlichen Grüssen
Thomas Ramel (@Web-Interface)
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003]
>> Dim sheet As Excel.Worksheet
>> Set sheet = Excel.ActiveSheet
>> sheet.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
>>
>> liefert mir weiterhin Kommata als Trennzeichen. Nur
>>
>> Dim wb As Excel.Workbook
>> Set wb = Excel.ActiveWorkbook
>> wb.SaveAs Filename:="c:\foo.csv", FileFormat:=Excel.xlCSV, Local:=True
>>
>> funktioniert hingegen korrekt mit Semikolon. Seltsam.
>
> Kopiere das Sheet zuerst - es wird dann gelich eine neue Mappe erstellt -
> und speichere diese Mappe dann als .CSV ab.
Naja, so geht es auch:
Dim wb As Excel.Workbook
Set wb = xlApp.Workbooks.Open(XLS_PATH, UpdateLinks:=False, ReadOnly:=True)
Dim ws As Excel.Worksheet
Set ws = wb.Worksheets(SHEET_NAME)
ws.Activate
wb.SaveAs Filename:=csvPath, FileFormat:=Excel.xlCSV, Local:=True
wb.Close SaveChanges:=False
Das ist aber nicht besonders stabil. Ich habe mit einem Arbeitsblatt getestet,
das in zwei Zellen jeweils ein Anführungszeichen (U+0022) enthält, also etwa so:
" "
Die exportierte .csv-Datei sieht so aus:
sep=;
";"
Nach dem erneuten Import sehe ich in Excel eine völlig andere Datei:
;
Der Export mit "Speichern unter..." oder wb.SaveAs liefert hingegen:
"""";""""
Und aus dieser CSV-Datei kann Excel dann auch wieder exakt
" "
laden.
--
<http://schneegans.de/web/xhtml/> · Klare Antworten zu XHTML
"Christoph Schneegans" schrieb:
> Thomas Ramel schrieb:
> >
> > Kopiere das Sheet zuerst - es wird dann gelich eine neue Mappe erstellt -
> > und speichere diese Mappe dann als .CSV ab.
>
> Naja, so geht es auch:
>
> Dim wb As Excel.Workbook
> Set wb = xlApp.Workbooks.Open(XLS_PATH, UpdateLinks:=False, ReadOnly:=True)
>
> Dim ws As Excel.Worksheet
> Set ws = wb.Worksheets(SHEET_NAME)
> ws.Activate
Ja, hier ist das betreffende Tabellenblatt dann aktiv, und damit klappt es
wohl.
> wb.SaveAs Filename:=csvPath, FileFormat:=Excel.xlCSV, Local:=True
> wb.Close SaveChanges:=False
[Code gesnippt]
> Das ist aber nicht besonders stabil.
Starke Worte, Christoph!
> Ich habe mit einem Arbeitsblatt getestet,
> das in zwei Zellen jeweils ein Anführungszeichen (U+0022) enthält, also etwa so:
>
> " "
...denn deine Daten sind ja auch alles andere als konform und IMO recht
exotisch....
Aber eine funktionierene Lösung hast Du ja bereits gefunden.