Перекодировка текстового файла - VBA
Формулировка задачи:
Здравствуйте! Есть макрос,который файл формата xlsx преобразует в kml. Но после преобразования,приходится открывать этот файл в нотпаде и меня кодировку на utf -8
Я использую функцию Function ChangeFileCharset ,Но она вообще не помогает,возможно я не так ее объявляю?(подскажите если это так)
Так же если не использоваться эту функцию,а просто прописать Print #fn, "<?xml version=""1.0"" encoding=""UTF-8""?>"
То кодировка файла UTF-8 без Bom, а мне нужно именно utf-8
Вот Код
Листинг программы
- Sub KML_XLS_Shablon()
- Dim i As Integer
- Dim fn As Integer
- fn = FreeFile
- Dim strFileName As String
- Dim strMessage As String
- ChangeFileCharset filename, "UTF-8", "Windows-1251" 'вызов процедуры
- ' Это все код самого макраса преобразования в kml
- strFileName = Application.GetSaveAsFilename _
- ("", "ALL files (*.*), *.*)")
- If InStr(strFileName, "False") = 0 Then
- Open strFileName For Output As fn
- Print #fn, "<kml xmlns=""http://earth.google.com/kml/2.0"">"
- Print #fn, "<Document>"
- Print #fn, "<name>KML - Google Maps</name>"
- ' добавить свое название карты в теге name
- Print #fn, "<description><![CDATA[KML 4 Google Maps]]></description>"
- ' добавить свое краткое описание карты
- Print #fn, "<Style id=""style1"">"
- Print #fn, "<IconStyle>"
- Print #fn, "<Icon>"
- Print #fn, "<href>http://www.urg.ru/temp/iconRental.png</href>"
- Print #fn, "</Icon>"
- Print #fn, "</IconStyle>"
- Print #fn, "</Style>"
- ' создать свои и прописать ссылку на них в Style
- Print #fn, "<Style id=""style2"">"
- Print #fn, "<IconStyle>"
- Print #fn, "<Icon>"
- Print #fn, "<href>http://www.urg.ru/temp/iconSale.png</href>"
- Print #fn, "</Icon>"
- Print #fn, "</IconStyle>"
- Print #fn, "</Style>"
- Print #fn, "<Style id=""style3"">"
- Print #fn, "<IconStyle>"
- Print #fn, "<Icon>"
- Print #fn, "<href>http://www.urg.ru/temp/off-iconRental.png</href>"
- Print #fn, "</Icon>"
- Print #fn, "</IconStyle>"
- Print #fn, "</Style>"
- Print #fn, "<Style id=""style4"">"
- Print #fn, "<IconStyle>"
- Print #fn, "<Icon>"
- Print #fn, "<href>http://www.urg.ru/temp/off-iconSale.png</href>"
- Print #fn, "</Icon>"
- Print #fn, "</IconStyle>"
- Print #fn, "</Style>"
- For i = 3 To 200
- If Sheets(1).Cells(i, 1) > "" Then
- Print #fn, "<Placemark>"
- Print #fn, "<name> " & Sheets(1).Cells(i, 2) & "</name>"
- Print #fn, "<description><![CDATA[<IMG WIDTH=""150"" src=""" & Sheets(1).Cells(i, 5) & """>"
- Print #fn, "<P>" & Sheets(1).Cells(i, 3)
- Print #fn, "<P>" & Sheets(1).Cells(i, 4)
- Print #fn, "<P> Дата:" & Sheets(1).Cells(i, 1)
- Print #fn, "<BR><br><A href=" & Sheets(1).Cells(i, 8) & ">Подробное описание>>></A>]]>"
- Print #fn, "</description>"
- If Sheets(1).Cells(i, 2) = "1" Then
- Print #fn, "<styleUrl>#style1</styleUrl>"
- End If
- If Sheets(1).Cells(i, 2) = "2" Then
- Print #fn, "<styleUrl>#style2</styleUrl>"
- End If
- If Sheets(1).Cells(i, 2) = "3" Then
- Print #fn, "<styleUrl>#style3</styleUrl>"
- End If
- If Sheets(1).Cells(i, 2) = "4" Then
- Print #fn, "<styleUrl>#style4</styleUrl>"
- End If
- Print #fn, "<Point>"
- Print #fn, "<coordinates>" & Sheets(1).Cells(i, 5) & "," & Sheets(1).Cells(i, 6) & "</coordinates>"
- Print #fn, "</Point>"
- Print #fn, "</Placemark>"
- End If
- Next i
- Print #fn, "</Document>"
- Print #fn, "</kml>"
- Close fn
- strMessage = "File saved" & strFileName & "'."
- Else
- strMessage = "Ошибка!"
- End If
- MsgBox strMessage
- End Sub 'конец макроса преобразования
- Function ChangeFileCharset(ByVal filename$, ByVal DestCharset$, _
- Optional ByVal SourceCharset$) As Boolean
- ' функция перекодировки (смены кодировки) текстового файла
- ' В качестве параметров функция получает путь filename$ к текстовому файлу,
- ' и название кодировки DestCharset$ (в которую будет переведён файл)
- ' Функция возвращает TRUE, если перекодировка прошла успешно
- On Error Resume Next: Err.Clear
- With CreateObject("ADODB.Stream")
- .Type = 2
- If Len(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку
- .Open
- .LoadFromFile filename$ ' загружаем данные из файла
- FileContent$ = .ReadText ' считываем текст файла в переменную FileContent$
- .Close
- .Charset = DestCharset$ ' назначаем новую кодировку
- .Open
- .WriteText FileContent$
- .SaveToFile filename$, 2 ' сохраняем файл уже в новой кодировке
- .Close
- End With
- ChangeFileCharset = Err = 0
- End Function
Решение задачи: «Перекодировка текстового файла»
textual
Листинг программы
- ChangeFileCharset strFileName, "UTF-8", "Windows-1251" 'вызов процедуры
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д