首页 > 解决方案 > VBA 将多个 Unicode 文本文件转换为常规 csv。这些文本文件具有 csv 扩展名

问题描述

我有几个小时尝试在 SO 上发布的代码。他们成功打开文件,但保存后,它们仍然是 Unicode 文本格式,Python pandas csv_reader 不会读取它们。这是我最新和最伟大的尝试。我的文件在子文件夹“QCfiles”中:

Sub LoopExample()

Dim MyFolder As String, MyFile As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Show
    MyFolder = .SelectedItems(1)
    Err.Clear
End With

Application.ScreenUpdating = False

MyFile = Dir(MyFolder & "\", vbReadOnly)

Do While MyFile <> ""
    Workbooks.Open FileName:=MyFolder & "\" & MyFile, UpdateLinks:=False
    MsgBox Cells(1, 1)
    ActiveWorkbook.SaveAs FileName:=MyFile, FileFormat:=xlCSV
    Workbooks(MyFile).Close savechanges:=True
    MyFile = Dir
Loop

Application.ScreenUpdating = True

End Sub

标签: excelvba

解决方案


在修改 CSV(通过 VBA)之前,请尝试将参数传递encodingpandas.read_csv().

据我了解,encoding默认为您的系统设置('cp1252'如果您的区域设置是英语的某种变体,则可能是这样)。

要覆盖这种隐式行为,您可以尝试传递encoding='utf-8'(或者encoding='utf-8-bom'可能是必要的),然后应该允许pandas解码/使用 Unicode 字符。

假设您已pandas在命名空间下导入pd并且您的文件位于C:\some_folder\ok.csv(在 Windows 上):

import pandas as pd

df = pd.read_csv('C:\\some_folder\\ok.csv', encoding='utf-8')

print(df.head())

在我看来值得一试,因为它可能是一个快速的解决方案。

(其他选择可能是导入一些 Python 库,它可以尝试推断文件的编码,然后使用该特定编码,但这显然是更多的工作。

此外,在强制将 Unicode 强制转换为 ASCII 时,您可能会丢失信息/字节,具体取决于是否有任何非 ASCII 字符。)


推荐阅读