【问题标题】:how to Export excel to csv file with "|" delimted and utf-8 code如何使用“|”将excel导出到csv文件分隔和 utf-8 代码
【发布时间】:2014-08-08 13:05:05
【问题描述】:

我不得不通过 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 ?

【问题讨论】:

  • 你必须保持分隔符为|有什么办法吗?只是提出一个想法,也许你必须在 UTF-8 中引用它,请参阅fileformat.info/info/unicode/char/007c/index.htm
  • 也许这很愚蠢,但是否可以以某种方式将语言环境代码页设置为 65001

标签: excel vba csv utf-8


【解决方案1】:

我发现的最佳解决方案是使用 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

问候

阿克塞尔

【讨论】:

  • 谢谢,我尝试使用“ADODB.Stream”,可以保存为“UTF-8”,但是这个“UTF-8”文件中的汉字都是垃圾
  • FileFormat:=xlUnicodeText 不是 UTF-8。如果 FileFormat:=xlUnicodeText 适合您,请尝试 oAdoS.Charset = "Unicode"。
  • 这不适用于字符类似于分隔符的单元格。
猜你喜欢
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2019-08-14
  • 2014-10-13
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多