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 ạYêu cầu kiểu này rồi sẽ đi theo quỹ đạo của quy luật chi phối nó.
'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 ạ
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ử, 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
2 dạng này (BOM và Without BOM) không khác nhau nhiều lắm về kỹ thuật,
Ghi tuần tự nối cell theo cột, hết dòng này đến dòng khác: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 ạ
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
Ghi tuần tự nối cell theo cột, hết dòng này đến dòng khác:
Tôi không biết chuyện đó. Mà thớt có cho biết làm chuyện gì đâu. Chẳng qua có sub thì đưa lên cho rộng đường đi.Bác có kiểm đã gỡ BOM hay chưa?
Không thấy code nào xử lý 3 byte EF BB BF.![]()
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?
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?
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.Đơ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 đó...
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.