Я сделал макрос, который генерирует CSV-файл с данными из листа Excel.Когда я нажимаю на кнопку, этот CSV-файл отправляется на сервер и используется через несколько минут.
Он отлично работает.
Единственная проблема заключается в том, что этот CSV-файл создается в UTF-8 с BOM, и я не хочу этого, мне нужен UTF-8 без BOM
Меня вдохновила эта функция, которую я нашел просто и легко читать: Используйте «ADODB.Stream» для преобразованияANSI в UTF-8, пропустить 1-2 символа в первом ряду
Я пытался адаптировать его к этому:
Function ConvertToUtf8(myFileIn, myFileOut)
Dim stream, strText
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 'text
stream.Charset = "_autodetect_all"
stream.Open
stream.LoadFromFile myFileIn
strText = stream.ReadText
stream.Close
stream.Type = 2
stream.Charset = "utf-8"
stream.Open
stream.Position = 3 'without BOM (doesn't work)
stream.WriteText strText
stream.SaveToFile myFileOut, 2
stream.Close
Set stream = Nothing
End Function
Я не знаю почему, но это создаетфайл в UTF-8 без спецификации, но появляется эта ошибка:
(https://imgur.com/a/FhJDAzh)
Я почти уверен, что не далеко от решения, но я не нахожуэто
Когда я нажимаю «отладка», появляется эта строка:
stream.Position = 3 'without BOM (doesn't work)
РЕДАКТИРОВАТЬ
Наконец я нашел именно то, что я былвместо функции, которая преобразует файл, ищем более эффективную функцию для записи непосредственно в UTF-8 без спецификации в файле:
Function WriteUTF8WithoutBOM(chaine As String, nomfichier As String)
Dim UTFStream As Object, BinaryStream As Object
With CreateObject("adodb.stream")
.Type = 2
.Mode = 3
.Charset = "UTF-8"
.LineSeparator = -1
.Open
.WriteText chaine, 1
.Position = 3 'skip BOM
Set BinaryStream = CreateObject("adodb.stream")
BinaryStream.Type = 1
BinaryStream.Mode = 3
BinaryStream.Open
'Strips BOM (first 3 bytes)
.CopyTo BinaryStream
.Flush
.Close
End With
BinaryStream.SaveToFile nomfichier, 2
BinaryStream.Flush
BinaryStream.Close
End Function
Для кредита,Я нашел это здесь https://www.excel -downloads.com / threads / вопрос-преобразование-en-utf-8-pour-une-vba-qui-enregistre-un-txt.20011510 / (Staple1600ответить)