excel - 如何使用 "|"分隔和 utf-8 代码将 Excel 导出到 csv 文件

标签 excel vba csv utf-8

我必须通过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/

相关文章:

excel - VBA中宏的可变错误

python - 使用 python 的 csv 文件中的列中的唯一元素

c# - 如何直接从 FTP 文件夹中的流创建和保存文件?

excel - 自定义 Excel VBA 重置值的奇怪问题

excel - xlPart 与 xlWhole

c++ - 使用 Qt 在 MS Word 中添加新页面

python - 流式传输大型 csv 文件的最快方法是什么?

excel - 找不到错误: VLOOKUP not returning the value

vba - 使用用户表单在一行中搜索和更新值

excel - 如何在 Microsoft Visual Basic (VBA for Excel) 中使用 Bloomberg 数据历史记录 (BDH) 命令