【问题标题】:How to save rows to files in UTF-8?如何以 UTF-8 将行保存到文件中?
【发布时间】:2019-05-20 16:15:13
【问题描述】:

我正在尝试将大型 txt 文件拆分为多个 txt 文件(编码 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,我得到的是问号字符串。任何帮助将非常感激!我也可以使用一些 python。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 谢谢!但是我如何在上面的宏中使用它呢?
    • 您只需构建文件名并在循环中调用这两个方法进行读取和写入。我认为这部分是微不足道的。你到底哪里有问题?
    • 如果我把它们放在我的宏的循环中,它就不起作用了。你介意告诉我在哪里插入它们吗?我将不胜感激!
    • 非常感谢您的帮助。那么,如果我们把所有这些放在一起,整个事情应该是什么样子呢?我尝试过,但失败了。
    • 我做对了!非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 2011-01-21
    • 2013-04-23
    • 2014-10-27
    • 2011-05-01
    • 2021-07-12
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多