Как сохранить строки в файлы в UTF-8? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь разбить большие текстовые файлы на несколько текстовых файлов (кодировка UTF-8). Язык, с которым я работаю, азиатский.

Я попробовал немного кода VBA и Python, но я не могу заставить это работать.

Sub ExportTextFiles()

Dim i As Long
Dim LastDataRow As Long
Dim MyFile As String
Dim fnum


    LastDataRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To LastDataRow
        'The next line uses the contents of column A on the same row to name it
        MyFile = "C:\Users\grego\Downloads\" & ActiveSheet.Range("A" & i).Value & ".txt"
        'Use the following line instead to just create a series of numbered files
        'MyFileName = "C:\Users\grego\Downloads\" & i & ".txt"
        fnum = FreeFile()
        Open MyFile For Output As fnum
        Print #fnum, Format(Range("B" & i))
        Close fnum
    Next i

End Sub

Этот макрос работает хорошо, но вывод ANSI, и вместо Unicode я получаю строки с вопросительными знаками. Любая помощь приветствуется! Я тоже мог бы использовать немного питона.

1 Ответ

1 голос
/ 19 мая 2019

Вы можете использовать ADO-Stream объекты для чтения и записи файлов utf-8.

Public Function ReadUTF8(f As String) As String
    Dim st As Object
    Set st = CreateObject("ADODB.Stream")
    st.Charset = "utf-8"
    st.Open
    st.LoadFromFile f
    ReadUTF8 = st.ReadText
    st.Close
    Set st = Nothing
End Function

Public Sub WriteUTF8(f As String, content As String)
    Const adSaveCreateOverWrite = 2
    Dim st As Object
    Set st = CreateObject("ADODB.Stream")
    st.Charset = "utf-8"
    st.Open
    st.WriteText content
    st.SaveToFile f, adSaveCreateOverWrite
    st.Close
    Set st = Nothing
End Sub

Тогда вам нужно только это внутри цикла:

MyFile = "C:\Users\grego\Downloads\" & ActiveSheet.Range("A" & i).Value & ".txt"
WriteUTF8 MyFile, ActiveSheet.Range("B" & i).Text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...