我必须通过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 ?
最佳答案
我发现的最佳解决方案是使用 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
问候
阿克塞尔
关于excel - 如何使用 "|"分隔和 utf-8 代码将 Excel 导出到 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204239/