Save as csv với định dạng UTF8 (1 người xem)

  • Thread starter Thread starter ptm0412
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ptm0412

Bad Excel Member
Thành viên BQT
Administrator
Tham gia
4/11/07
Bài viết
14,541
Được thích
37,246
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Hiện tại tôi đang dùng Excel 2016, trong chức năng save as csv có 1 file type là CSV UTF-8, tôi viết code để tự động tạo ra file csv dùng để import vào phần mềm khác.
Tuy nhiên khi đưa file cho người khác dùng thì máy của họ không có file type này, nếu lưu dạng csv thông thường hoặc file UnicodeText thì không import vào được vì mất các ký tự có dấu tiếng Việt:
- File csv thông thường: lỗi mất ký tự tiếng Việt có dấu ngay sau khi save (mở xem bằng notepad)
- File UnicodeText (đuôi txt hoặc sửa thành csv): mở xem bằng notepad thì còn dấu tiếng Việt, nhưng import vào phần mềm cũng lại mất
Tra cứu trên mạng thì toàn những cách sửa bằng save as với notepad sau khi save (mà sau khi save thì đã mất bà nó dấu rồi), hoặc chỉnh sửa web option của excel (vô tác dụng)

Vậy nhờ các bạn nghiên cứu hộ có cách nào:
1. Trường hợp save as csv: tác động được decoding của file trước khi save? Vì sau khi save rồi là tiêu.

2. Trường hợp save as UnicodeText thì có code nào của VBA:
- Mở file vừa save bằng notepad
- Save as (bằng notepad) thành file mới với mục chọn decoding là UTF8

Code hiện tại của tôi (2016) là:

PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlCSVUTF8

hoặc
PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlUnicodeText

Xin cám ơn,
 
Hiện tại tôi đang dùng Excel 2016, trong chức năng save as csv có 1 file type là CSV UTF-8, tôi viết code để tự động tạo ra file csv dùng để import vào phần mềm khác.
Tuy nhiên khi đưa file cho người khác dùng thì máy của họ không có file type này, nếu lưu dạng csv thông thường hoặc file UnicodeText thì không import vào được vì mất các ký tự có dấu tiếng Việt:
- File csv thông thường: lỗi mất ký tự tiếng Việt có dấu ngay sau khi save (mở xem bằng notepad)
- File UnicodeText (đuôi txt hoặc sửa thành csv): mở xem bằng notepad thì còn dấu tiếng Việt, nhưng import vào phần mềm cũng lại mất
Tra cứu trên mạng thì toàn những cách sửa bằng save as với notepad sau khi save (mà sau khi save thì đã mất bà nó dấu rồi), hoặc chỉnh sửa web option của excel (vô tác dụng)

Vậy nhờ các bạn nghiên cứu hộ có cách nào:
1. Trường hợp save as csv: tác động được decoding của file trước khi save? Vì sau khi save rồi là tiêu.

2. Trường hợp save as UnicodeText thì có code nào của VBA:
- Mở file vừa save bằng notepad
- Save as (bằng notepad) thành file mới với mục chọn decoding là UTF8

Code hiện tại của tôi (2016) là:

PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlCSVUTF8

hoặc
PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlUnicodeText

Xin cám ơn,
Anh ơi. Em thử code trên thì bị lỗi. (không rõ FName như thế nào?)
Anh minh họa file hoặc hình ảnh trước và sau khi bị mất dấu được không?
 
Upvote 0
Anh ơi. Em thử code trên thì bị lỗi. (không rõ FName như thế nào?)
Anh minh họa file hoặc hình ảnh trước và sau khi bị mất dấu được không?

FName là gì không quan trọng:
PHP:
ActiveWorkbook.SaveAs Filename:="D:\abc.csv", FileFormat:=xlCSVUTF8

Quan trọng là có máy có xlCSVUTF8, có máy không. Nếu không có thì phải dùng FileFormat:=xlCSV và bị mất dấu tiếng Việt
 
Upvote 0
FName là gì không quan trọng:
PHP:
ActiveWorkbook.SaveAs Filename:="D:\abc.csv", FileFormat:=xlCSVUTF8

Quan trọng là có máy có xlCSVUTF8, có máy không. Nếu không có thì phải dùng FileFormat:=xlCSV và bị mất dấu tiếng Việt
Thử cách này được không anh?
- Save as (file excel đó) Type: Unicode text (*.txt)
- Đổi đuôi .txt thành .csv
 
Upvote 0
Hiện tại tôi đang dùng Excel 2016, trong chức năng save as csv có 1 file type là CSV UTF-8, tôi viết code để tự động tạo ra file csv dùng để import vào phần mềm khác.
Tuy nhiên khi đưa file cho người khác dùng thì máy của họ không có file type này, nếu lưu dạng csv thông thường hoặc file UnicodeText thì không import vào được vì mất các ký tự có dấu tiếng Việt:
- File csv thông thường: lỗi mất ký tự tiếng Việt có dấu ngay sau khi save (mở xem bằng notepad)
- File UnicodeText (đuôi txt hoặc sửa thành csv): mở xem bằng notepad thì còn dấu tiếng Việt, nhưng import vào phần mềm cũng lại mất
Tra cứu trên mạng thì toàn những cách sửa bằng save as với notepad sau khi save (mà sau khi save thì đã mất bà nó dấu rồi), hoặc chỉnh sửa web option của excel (vô tác dụng)

Vậy nhờ các bạn nghiên cứu hộ có cách nào:
1. Trường hợp save as csv: tác động được decoding của file trước khi save? Vì sau khi save rồi là tiêu.

2. Trường hợp save as UnicodeText thì có code nào của VBA:
- Mở file vừa save bằng notepad
- Save as (bằng notepad) thành file mới với mục chọn decoding là UTF8

Code hiện tại của tôi (2016) là:

PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlCSVUTF8

hoặc
PHP:
    ActiveWorkbook.SaveAs Filename:= _
    Directory & FName, FileFormat:=xlUnicodeText

Xin cám ơn,

Máy em sử dụng là Office 2016 và không có hằng số nào gọi là "xlCSVUTF8" cả
Vậy nên ta chỉ có thể sử dụng xlUnicodeText mà thôi.
Khi Đã ghi file CSV rồi mở bằng Notepad thấy vẫn còn dấu tiếng Việt , mà mở bằng phần mềm thì mất dấu tiếng Việt thì không biết phần mềm đó làm ăn kiểu gì ?
có thể câu hỏi đó hơi quá đáng nhưng em muốn biết phần mềm đó đọc file csv theo cách nào ? đọc Text hay dùng ADO ?

cái số 2 trong bài viết của anh thì rơi vào tình trạng người hỏi yêu cầu người giúp làm theo hướng mà họ cho là đúng. Tại sao cần phải mở file bằng Notepad ? Dưới đây em sẽ làm thí nghiệm chuyển file có charset Unicode sang UFT-8

Mã:
Public Sub hello()
Dim str As String
With CreateObject("ADODB.Stream")
    .Open
    .Type = 2
    .Charset = "unicode"
    .LoadFromFile ThisWorkbook.Path & "\data.csv"
    str = .Readtext
    .Close
  
    .Open
    .Charset = "utf-8"
    .WriteText str
    .SaveToFile ThisWorkbook.Path & "\dataUtf8.csv", 2
    .Close
End With
End Sub

chú ý đoạn str. Đó là 1 đoạn text có dấu tiếng Việt hẳn hoi và nó đại diện cho "data" của file CSV có charset Unicode . Có thể đem chuỗi đó ra phân tích luôn chứ chưa cần ghi ra file.
 
Upvote 0
Thử cách này được không anh?
- Save as (file excel đó) Type: Unicode text (*.txt)
- Đổi đuôi .txt thành .csv
Đó là cách anh làm trường hợp 2, đặt tên FName với đuôi csv luôn rồi. Nhưng import vào phần mềm thì lỗi dấu tiếng Việt.

Máy em sử dụng là Office 2016 và không có hằng số nào gọi là "xlCSVUTF8" cả
Vậy nên ta chỉ có thể sử dụng xlUnicodeText mà thôi.
Cái file type xlCSVUTF8 trong hình này, và chỉ có khi Office cập nhật phiên bản 16.0.7967.2761:

CSVUTF8_zpsvfnygclo.jpg


Khi Đã ghi file CSV rồi mở bằng Notepad thấy vẫn còn dấu tiếng Việt , mà mở bằng phần mềm thì mất dấu tiếng Việt thì không biết phần mềm đó làm ăn kiểu gì ?
có thể câu hỏi đó hơi quá đáng nhưng em muốn biết phần mềm đó đọc file csv theo cách nào ? đọc Text hay dùng ADO ?

Phần mềm viết bằng Java trên nền web, chạy trên web browser, không biết nó đọc kiểu gì :)

cái số 2 trong bài viết của anh thì rơi vào tình trạng người hỏi yêu cầu người giúp làm theo hướng mà họ cho là đúng. Tại sao cần phải mở file bằng Notepad ? Dưới đây em sẽ làm thí nghiệm chuyển file có charset Unicode sang UFT-8

Mã:
Public Sub hello()
...
End Sub

Đoạn code này chạy ngon lành rồi, cám ơn AutoReply nhiều. Câu ghi chú của bạn cũng hữu ích vì khi save Unicode text, nó dư mỗi record 1 cặp dấu nháy, tôi xử lý bỏ dấu nháy trước khi SaveToFile.

Một lần nữa xin cám ơn AutoReply và cả befaint.
 
Upvote 0
Web KT

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

Back
Top Bottom