如何使用“|”分隔符和utf-8代码将excel导出到csv文件
我必须通过vba脚本将excel文件导出到csv文件。 csv文件必须是utf-8的代码,并且是“|”
我使用SetLocaleInfo设置单独列表为“|”,但它只影响“xlcsv”不影响“xlunicodetext”。
Private Function SetLocalSetting(LC_CONST As Long, strSetting As String) As Boolean SetLocaleInfo GetUserDefaultLCID(), LC_CONST, strSetting End Function SetLocalSetting LOCALE_SLIST, "|"
何时使用“xlUnicodeText”,代码是UTF-8,但列表分隔符仍然是“Tab”
.SaveAs filename:="C:\temp\1.csv", FileFormat:=xlUnicodeText, Local:=True
何时使用“xlCSV”,列表分隔符仍然是“|” 我需要什么,但代码页是ANSI。
.SaveAs filename:="C:\temp\1.csv", FileFormat:=xlcsv, Local:=True
如何用“|”导出csv文件 分隔符和UTF-8?
我发现最好的解决scheme是使用ADODB.Stream:http://msdn.microsoft.com/en-us/library/ms677486%28v=VS.85%29.aspx
Sub saveUnicodeCSV() Set oAdoS = CreateObject("ADODB.Stream") oAdoS.Charset = "UTF-8" oAdoS.Mode = 3 oAdoS.Type = 2 oAdoS.Open lRow = 1 lCol = 1 Do Until Sheets(1).Cells(lRow, lCol).Value = "" oAdoS.WriteText (Sheets(1).Cells(lRow, lCol).Text) lCol = lCol + 1 Do Until Sheets(1).Cells(lRow, lCol).Value = "" oAdoS.WriteText ("|" & Sheets(1).Cells(lRow, lCol).Text) lCol = lCol + 1 Loop oAdoS.WriteText (vbCrLf) lCol = 1 lRow = lRow + 1 Loop oAdoS.SaveToFile "test.csv", 2 oAdoS.Close Set oAdoS = Nothing End Sub
问候
阿克塞尔