在 VBA 中导入 CSV 文件但无法保留外来符号
Import CSV file in VBA but cannot preserve foreign symbols
我正在尝试创建一个脚本,我在其中按下一个按钮,您会看到一个弹出窗口 window,您可以在其中 select 您的 .CSV 文件,然后将其加载到特定的目的地。到目前为止,我已经设法做到了我刚才所说的,但作为一个非英语用户,我的 .CSV 中的数据是用瑞典语编写的,我需要保留我们的 "special" 符号。
我尝试记录自己使用导入数据向导加载文件的过程,但我无法全神贯注于该代码以使其与变量一起工作 name/filepath。
到目前为止,我得到的是下面的代码,它可以快速轻松地加载文件,但不保留特殊符号,如“åäö”。
Dim ws As Worksheet, strFile As String
Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.PreserveFormatting = True
.Refresh
End With
根据导入向导,.CSV 文件的来源是“65001:Unicode (UTF-8)”,我试图找到 .QueryTables 的属性以识别这一点。
我尝试过的许多事情之一是:
.QueryType = xlOLEDBQuery / xlTextImport
.TextFilePlatform = xlWindows / xlMSDOS
但是 .QueryType 只给我一个 "object doesn't support this method or property" 或 "invalid property assignment"。
感觉问题在于 Excel 不知道应该如何处理文件的编码(Unicode (UTF-8)),但我在这方面还很新手,所以我可能看错东西了
感谢@Ron Rosenfeld 引导我朝着正确的方向前进,我找到了解决方案。
只需要:
.TextFilePlatform = 65001
我确实在文件 > 选项 > 数据中为文本启用了 旧版 数据导入。
然后我在导入时记录了我的操作,在这段代码中我找到了上面那行解决了我的问题。
最终代码:
Dim ws As Worksheet, strFile As String
Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.PreserveFormatting = True
.TextFilePlatform = 65001
.Refresh
End With
我正在尝试创建一个脚本,我在其中按下一个按钮,您会看到一个弹出窗口 window,您可以在其中 select 您的 .CSV 文件,然后将其加载到特定的目的地。到目前为止,我已经设法做到了我刚才所说的,但作为一个非英语用户,我的 .CSV 中的数据是用瑞典语编写的,我需要保留我们的 "special" 符号。
我尝试记录自己使用导入数据向导加载文件的过程,但我无法全神贯注于该代码以使其与变量一起工作 name/filepath。
到目前为止,我得到的是下面的代码,它可以快速轻松地加载文件,但不保留特殊符号,如“åäö”。
Dim ws As Worksheet, strFile As String
Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.PreserveFormatting = True
.Refresh
End With
根据导入向导,.CSV 文件的来源是“65001:Unicode (UTF-8)”,我试图找到 .QueryTables 的属性以识别这一点。
我尝试过的许多事情之一是:
.QueryType = xlOLEDBQuery / xlTextImport
.TextFilePlatform = xlWindows / xlMSDOS
但是 .QueryType 只给我一个 "object doesn't support this method or property" 或 "invalid property assignment"。
感觉问题在于 Excel 不知道应该如何处理文件的编码(Unicode (UTF-8)),但我在这方面还很新手,所以我可能看错东西了
感谢@Ron Rosenfeld 引导我朝着正确的方向前进,我找到了解决方案。
只需要:
.TextFilePlatform = 65001
我确实在文件 > 选项 > 数据中为文本启用了 旧版 数据导入。 然后我在导入时记录了我的操作,在这段代码中我找到了上面那行解决了我的问题。 最终代码:
Dim ws As Worksheet, strFile As String
Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")
With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.PreserveFormatting = True
.TextFilePlatform = 65001
.Refresh
End With