如何使用“|”分隔符和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 

问候

阿克塞尔