Lưu range của sheet thành file txt với format : UTF-8

Liên hệ QC

khoa140383

Thành viên hoạt động
Tham gia
2/10/09
Bài viết
101
Được thích
34
Cả nhà giúp em vụ này với, em tìm được code lưu thành UTF-8 nhưng không biết cách nào lưu nguyên range vào ( VD: A1:A8 ).
Cả nhà hổ trợ dùm em nhé... nhìn tới mấy hàm API là muốn điên luôn... hjx...
Have a nice day All !!!

Code như sau :
Option Explicit
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByVal lpUsedDefaultChar As Long) As Long

Private Sub getUtf8(ByRef s As String, ByRef b() As Byte)
Const CP_UTF8 As Long = 65001
Dim len_s As Long
Dim ptr_s As Long
Dim size As Long
Erase b
len_s = Len(s)
If len_s = 0 Then _
Err.Raise 30030, , "Len(WideChars) = 0"
ptr_s = StrPtr(s)
size = WideCharToMultiByte(CP_UTF8, 0, ptr_s, len_s, 0, 0, 0, 0)
If size = 0 Then _
Err.Raise 30030, , "WideCharToMultiByte() = 0"
ReDim b(0 To size - 1)
If WideCharToMultiByte(CP_UTF8, 0, ptr_s, len_s, VarPtr(b(0)), size, 0, 0) = 0 Then _
Err.Raise 30030, , "WideCharToMultiByte(" & Format$(size) & ") = 0"
End Sub

Public Sub writeUtf()
Dim file As Integer
Dim s As String
Dim b() As Byte
s = "äöüßµ@€|~{}[]²³\ .." & _
" OMEGA" & ChrW$(937) & ", SIGMA" & ChrW$(931) & _
", alpha" & ChrW$(945) & ", beta" & ChrW$(946) & ", pi" & ChrW$(960) & vbCrLf
file = FreeFile
Open "C:\Temp\TestUtf8.txt" For Binary Access Write Lock Read Write As #file
getUtf8 s, b
Put #file, , b
Close #file
End Sub
 
Lần chỉnh sửa cuối:
Cả nhà giúp em vụ này với, em tìm được code lưu thành UTF-8 nhưng không biết cách nào lưu nguyên range vào ( VD: A1:A8 ).
Cả nhà hổ trợ dùm em nhé... nhìn tới mấy hàm API là muốn điên luôn... hjx...
Have a nice day All !!!

Đối với việc lưu hoặc xuất file txt, chỉ cần Scripting.FileSytemObject là đủ. Không cần đến API đâu
Trên GPE có đầy bài viết tương tự
 
Upvote 0
Anh ơi, em tìm trên diễn đàn rồi mà không có... chỉ lưu tới format unicode là hết rồi, ý em muốn tìm đến utf-8 luôn anh ơi. Cái code trên em chỉ lưu được cell thôi, ko lưu được range, anh hổ trợ em với. Em đang làm việc với global software nó đòi phải upload file txt dạng utf-8 nó mới chịu xuất pre-alert đến khách hàng... mỗi ngày em phải chuyển định dạng cả trăm cái txt cũng hơi mệt.... mong anh hổ trợ ngâm cứu dùm em...
Đa tạ !!!
 
Upvote 0
diễn đàn này không sợ vấn đề nghiên cứu dùm . chỉ sợ cảnh muốn nghiên cứu mà không có file làm mẫu thì nghiên cứu vào đâu ?
ví dụ : lưu range là range nào ? có cấu trúc làm sao ? file txt xuất ra phải có nội dung làm sao ?
 
Upvote 0
diễn đàn này không sợ vấn đề nghiên cứu dùm . chỉ sợ cảnh muốn nghiên cứu mà không có file làm mẫu thì nghiên cứu vào đâu ?
ví dụ : lưu range là range nào ? có cấu trúc làm sao ? file txt xuất ra phải có nội dung làm sao ?

Anh ơi, anh cho file ếch seo nào cũng được, chọn vùng A1:A8, đánh gì vô cũng được ( vì em ko có đánh gì liên quan đến unicode cả, sử dụng tiếng anh ) khổ nỗi là cái soft kia nó đòi phải là format utf-8 nó mới hiểu... thế mới đau...
>>> miễn sao anh lưu được ra file txt với format là utf-8 là được !!!
 
Upvote 0
Anh ơi, em tìm trên diễn đàn rồi mà không có... chỉ lưu tới format unicode là hết rồi, ý em muốn tìm đến utf-8 luôn anh ơi. Cái code trên em chỉ lưu được cell thôi, ko lưu được range, anh hổ trợ em với. Em đang làm việc với global software nó đòi phải upload file txt dạng utf-8 nó mới chịu xuất pre-alert đến khách hàng... mỗi ngày em phải chuyển định dạng cả trăm cái txt cũng hơi mệt.... mong anh hổ trợ ngâm cứu dùm em...
Đa tạ !!!

Thử code này xem:
1> Code 1:
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
ExitSub:
  Set clbObj = Nothing
End Sub
1> Code 2:
Mã:
Sub Main()
  Dim Range2Export As Range, txtFile As String
 [COLOR=#0000cd] Set Range2Export = Sheet1.Range("A1:B5")[/COLOR]
  [COLOR=#ff0000]txtFile = ThisWorkbook.Path & "\TestUTF8.txt"[/COLOR]
  Data2UTF8 Range2Export, txtFile
End Sub
-----------------
- Cho cả 2 đoạn code vào module
- Không cần quan tâm code 1 viết gì, chỉ cần biết cách áp dụng tại code 2: Chỗ màu xanh là Range cần lưu, chỗ màu đỏ là đường dẫn file txt để lưu
 

File đính kèm

  • Data(Unicode)2UTF8.xlsm
    14.4 KB · Đọc: 15
Upvote 0
Bác cũng ngủ muộn ghê nhỉ... hj...
Mai em test rồi sẽ reply lại nhé... ( em lỡ off máy rồi , theo dõi trên điện thoại thôi )
Cám ơn bác đã nhiệt tình giúp đỡ...
Good night !!!
 
Upvote 0
Thử code này xem:
1> Code 1:
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
ExitSub:
  Set clbObj = Nothing
End Sub
1> Code 2:
Mã:
Sub Main()
  Dim Range2Export As Range, txtFile As String
 [COLOR=#0000cd] Set Range2Export = Sheet1.Range("A1:B5")[/COLOR]
  [COLOR=#ff0000]txtFile = ThisWorkbook.Path & "\TestUTF8.txt"[/COLOR]
  Data2UTF8 Range2Export, txtFile
End Sub
-----------------
- Cho cả 2 đoạn code vào module
- Không cần quan tâm code 1 viết gì, chỉ cần biết cách áp dụng tại code 2: Chỗ màu xanh là Range cần lưu, chỗ màu đỏ là đường dẫn file txt để lưu

+ Quá chuẩn, không cần chỉnh nữa anh ơi... cám ơn anh nhiều lắm lắm...
+ Nhân tiện cho em hỏi là giữa cái format unicode và cái utf-8 có gì khác nhau không anh ?? Tại sao cái software kia cứ khăng khăng đòi utf-8 ( cái soft đó dạng : một ổ đĩa trên mạng, sau khi upload các file ( invoice, packing list, nonwood certificate... ) vào 1 folder thì phải upload cái file text utf-8 để nó vào cái email body thì nó mới gửi thông báo hàng đến tới khách hàng đầu ngoài ).
+ Nếu ở gần Thủ Đức - TPHCM thì xin được mạn phép mời anh một chầu cafe để tỏ lòng biết ơn.
Have a nice day Anh NDU !!!
 
Upvote 0
+ Nhân tiện cho em hỏi là giữa cái format unicode và cái utf-8 có gì khác nhau không anh
Chuyện này tôi không biết đâu, cần đến đâu nghiên cứu đến nấy thôi

+ Nếu ở gần Thủ Đức - TPHCM thì xin được mạn phép mời anh một chầu cafe để tỏ lòng biết ơn.

Cái vụ cafe + hút thuốc thì sẵn sàng "tiếp chiêu" với bạn
Tôi ở Biên Hòa, bạn có rảnh ghé qua đây chơi (ở đây còn vài thành viên nữa)
Thêm chuyện quan trọng: Nếu cảm thấy hứng thứ với diễn đàn, hãy đăng ký tham dự sinh nhật vào tháng 7 đi. Hy vọng sẽ gặp bạn và nhiều thành viên mới nữa
 
Upvote 0
Thử code này xem:
1> Code 1:
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
ExitSub:
  Set clbObj = Nothing
End Sub
1> Code 2:
Mã:
Sub Main()
  Dim Range2Export As Range, txtFile As String
 [COLOR=#0000cd] Set Range2Export = Sheet1.Range("A1:B5")[/COLOR]
  [COLOR=#ff0000]txtFile = ThisWorkbook.Path & "\TestUTF8.txt"[/COLOR]
  Data2UTF8 Range2Export, txtFile
End Sub
-----------------
- Cho cả 2 đoạn code vào module
- Không cần quan tâm code 1 viết gì, chỉ cần biết cách áp dụng tại code 2: Chỗ màu xanh là Range cần lưu, chỗ màu đỏ là đường dẫn file txt để lưu
Bác cho em hỏi, e dùng code này nhưng lúc xuất file txt ra thì nó ở dạng “UTF-8 with BOM”, vậy làm sao để chỉ lưu ở dạng “UTF-8” vậy ạ?
 
Upvote 0
Bác cho em hỏi, e dùng code này nhưng lúc xuất file txt ra thì nó ở dạng “UTF-8 with BOM”, vậy làm sao để chỉ lưu ở dạng “UTF-8” vậy ạ?
xem tại link sau đây
https://www.giaiphapexcel.com/diendan/threads/xin-code-vba-chuyển-1-vùng-dữ-liệu-từ-excel-sang-file-txt-utf8.164741/#post-1100180
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom