Xin code VBA chuyển 1 vùng dữ liệu từ excel sang file .txt (UTF8)!!!

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Anhvn5

Thành viên mới
Tham gia
9/2/23
Bài viết
6
Được thích
0
Em không giỏi về các code VBA, cần các cao nhân chỉ giáo giúp em code để chuyển 1 vùng dữ liệu từ file excel sang file dạng .txt (UTF 8) với ạ! Em cảm ơn cả nhà!
 
Yêu cầu kiểu này rồi sẽ đi theo quỹ đạo của quy luật chi phối nó.
 
Xác định là cao nhân, nên cao nhân trả lời như sau
Tìm kiểu code , sử dụng kiểu code này đi
Mã:
'Create Stream object
    Set fsT = CreateObject("ADODB.Stream")

    'Specify stream type -  To save text/string data.
    fsT.Type = 2

    'Specify charset For the source text data.
    fsT.CharSet = "utf-8"
 
Em có thấy code ở trên forum rồi, nhưng file xuất lại là “UTF-8 with BOM”, nhưng file e cần đang là “UTF-8” thôi ạ

Sửa lại code của bác NDU chút, thêm code loại bỏ 3 byte BOM. Nó đi lòng vòng chút nhưng ra kết quả là được. :)


Mã:
Private Sub Data2UTF8(ByVal Range2Export As Range, ByVal txtFile As String)
    Dim clbObj As Object
    Dim text As String
    On Error GoTo ExitSub
    Set clbObj = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Range2Export.Copy
    clbObj.GetFromClipboard
    text = clbObj.GetText
    Application.CutCopyMode = 0
    If UCase(Right(txtFile, 4)) <> ".TXT" Then txtFile = txtFile & ".txt"
    With CreateObject("ADODB.Stream")
        .Type = 2
        .Charset = "utf-8"
        .Open
        .WriteText text
        .SaveToFile txtFile
    End With
    
    'Bo 3 byte BOM
    Dim objStreamUTF8, objStreamUTF8NoBOm
    Set objStreamUTF8 = CreateObject("ADODB.Stream")
    Set objStreamUTF8NoBOm = CreateObject("ADODB.Stream")
    With objStreamUTF8
        .Charset = "UTF-8"
        .Open
        .LoadFromFile txtFile
        .Type = 2 'adTypeText
        .Position = 3
    End With
    
    With objStreamUTF8NoBOm
        .Type = 1 'adTypeBinary
        .Open
        objStreamUTF8.CopyTo objStreamUTF8NoBOm
        .SaveToFile txtFile, 2 'OverWrite
    End With
    objStreamUTF8.Close
    objStreamUTF8NoBOm.Close
    
    
ExitSub:
    Set clbObj = Nothing
End Sub
 
  • Thích
Reactions: TH2
Đã thử, nhưng đúng là không để ý yếu tố BOM, lạ nhỉ 2 dạng này (BOM và Without BOM) không khác nhau nhiều lắm về kỹ thuật, không hiểu sao người hỏi lại cần, nếu cần thường người ta xử lý ở phần cuối sử dụng kết quả đó - thay vì lúc xuất ra như thế này
 
Em có thấy code ở trên forum rồi, nhưng file xuất lại là “UTF-8 with BOM”, nhưng file e cần đang là “UTF-8” thôi ạ
Ghi tuần tự nối cell theo cột, hết dòng này đến dòng khác:
Rich (BB code):
Sub WriteText_utf_8()
Dim st As Object, iFileNum As Integer
Dim i&, j&, sPathname$, sText$, MyFile$, aData

    iFileNum = FreeFile
    Open ActiveWorkbook.Path & "\" & "Mau.txt" For Output As iFileNum
    Close #iFileNum

    Set st = CreateObject("ADODB.Stream")
    MyFile = ActiveWorkbook.Path & "\" & "Mau.txt"
    st.Type = 2
    st.Charset = "utf-8"
   
    aData = Range("A2:B5").Value
    st.Open
    st.LoadFromFile (MyFile)
    For i = 1 To UBound(aData)
        For j = 1 To UBound(aData, 2)
            sText = sText & aData(i, j) & ";"
        Next
        st.WriteText sText & Chr(10)
        sText = ""
    Next i
    st.SaveToFile ActiveWorkbook.Path & "\" & "KetQua.txt", 2
    st.Close
    Kill MyFile
    Set st = Nothing
    MsgBox "Xong roi."
End Sub
 
Tôi muốn nói đến dữ liệu của thớt kia. Bạn thì chép 1 range rồi dán vào file text, tôi thì nối dữ liệu còn thớt muốn gì, đâu biết đâu?
:) Đơn giản là thớt muốn chuyển dữ liệu từ Excel ra file TEXT - .txt (UTF-8). Thớt đã thử qua code của bác NDU và nó cũng chỉ chuyển thành file .txt (UTF-8 - BOM). Do tôi sửa code bác NDU chút để chuyển ra .txt (UTF-8) đúng yêu cầu thôi. Và yêu cầu này là thực tế.
Việc lưu thành file .txt mặc định của ADODB stream luôn luôn có thêm 3 byte dữ liệu BOM, không liên quan gì đến file đầu vào.
Cái vụ BOM này như befaint có đề cập ở trên là đã có một cuộc tranh luận nảy lửa vụ bom đạn đó...:D

Hình bên dưới là tôi test code của bác và code chỉnh sửa của tôi ở trên.

- File .txt có BOM: cod của bác

Screenshot at Apr 07 21-16-13.png

- File .txt đã gỡ BOM (bỏ 3 byte EF BB BF)

Screenshot at Apr 07 21-17-07.png
 
:) Đơn giản là thớt muốn chuyển dữ liệu từ Excel ra file TEXT - .txt (UTF-8). Thớt đã thử qua code của bác NDU và nó cũng chỉ chuyển thành file .txt (UTF-8 - BOM). Do tôi sửa code bác NDU chút để chuyển ra .txt (UTF-8) đúng yêu cầu thôi. Và yêu cầu này là thực tế.
Việc lưu thành file .txt mặc định của ADODB stream luôn luôn có thêm 3 byte dữ liệu BOM, không liên quan gì đến file đầu vào.
Cái vụ BOM này như befaint có đề cập ở trên là đã có một cuộc tranh luận nảy lửa vụ bom đạn đó...:D

Hình bên dưới là tôi test code của bác và code chỉnh sửa của tôi ở trên.

- File .txt có BOM: cod của bác

View attachment 288631

- File .txt đã gỡ BOM (bỏ 3 byte EF BB BF)

View attachment 288632
Tôi không biết có BOM thì sao, ảnh hưởng đến việc gì nhưng muốn chuyển qua utf-8, vào Notepad++ bấm cái là xong.
 
Web KT
Back
Top Bottom