Перекодировка текстового файла - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть макрос,который файл формата xlsx преобразует в kml. Но после преобразования,приходится открывать этот файл в нотпаде и меня кодировку на utf -8 Я использую функцию Function ChangeFileCharset ,Но она вообще не помогает,возможно я не так ее объявляю?(подскажите если это так) Так же если не использоваться эту функцию,а просто прописать Print #fn, "<?xml version=""1.0"" encoding=""UTF-8""?>" То кодировка файла UTF-8 без Bom, а мне нужно именно utf-8 Вот Код
Листинг программы
  1. Sub KML_XLS_Shablon()
  2. Dim i As Integer
  3. Dim fn As Integer
  4. fn = FreeFile
  5. Dim strFileName As String
  6. Dim strMessage As String
  7. ChangeFileCharset filename, "UTF-8", "Windows-1251" 'вызов процедуры
  8.  
  9. ' Это все код самого макраса преобразования в kml
  10. strFileName = Application.GetSaveAsFilename _
  11. ("", "ALL files (*.*), *.*)")
  12.  
  13. If InStr(strFileName, "False") = 0 Then
  14. Open strFileName For Output As fn
  15.  
  16. Print #fn, "<kml xmlns=""http://earth.google.com/kml/2.0"">"
  17. Print #fn, "<Document>"
  18. Print #fn, "<name>KML - Google Maps</name>"
  19. ' добавить свое название карты в теге name
  20. Print #fn, "<description><![CDATA[KML 4 Google Maps]]></description>"
  21. ' добавить свое краткое описание карты
  22. Print #fn, "<Style id=""style1"">"
  23. Print #fn, "<IconStyle>"
  24. Print #fn, "<Icon>"
  25. Print #fn, "<href>http://www.urg.ru/temp/iconRental.png</href>"
  26. Print #fn, "</Icon>"
  27. Print #fn, "</IconStyle>"
  28. Print #fn, "</Style>"
  29.  
  30. ' создать свои и прописать ссылку на них в Style
  31. Print #fn, "<Style id=""style2"">"
  32. Print #fn, "<IconStyle>"
  33. Print #fn, "<Icon>"
  34. Print #fn, "<href>http://www.urg.ru/temp/iconSale.png</href>"
  35. Print #fn, "</Icon>"
  36. Print #fn, "</IconStyle>"
  37. Print #fn, "</Style>"
  38. Print #fn, "<Style id=""style3"">"
  39. Print #fn, "<IconStyle>"
  40. Print #fn, "<Icon>"
  41. Print #fn, "<href>http://www.urg.ru/temp/off-iconRental.png</href>"
  42. Print #fn, "</Icon>"
  43. Print #fn, "</IconStyle>"
  44. Print #fn, "</Style>"
  45.  
  46. Print #fn, "<Style id=""style4"">"
  47. Print #fn, "<IconStyle>"
  48. Print #fn, "<Icon>"
  49. Print #fn, "<href>http://www.urg.ru/temp/off-iconSale.png</href>"
  50. Print #fn, "</Icon>"
  51. Print #fn, "</IconStyle>"
  52. Print #fn, "</Style>"
  53.  
  54. For i = 3 To 200
  55. If Sheets(1).Cells(i, 1) > "" Then
  56. Print #fn, "<Placemark>"
  57. Print #fn, "<name> " & Sheets(1).Cells(i, 2) & "</name>"
  58. Print #fn, "<description><![CDATA[<IMG WIDTH=""150"" src=""" & Sheets(1).Cells(i, 5) & """>"
  59. Print #fn, "<P>" & Sheets(1).Cells(i, 3)
  60. Print #fn, "<P>" & Sheets(1).Cells(i, 4)
  61. Print #fn, "<P> Дата:" & Sheets(1).Cells(i, 1)
  62. Print #fn, "<BR><br><A href=" & Sheets(1).Cells(i, 8) & ">Подробное описание>>></A>]]>"
  63. Print #fn, "</description>"
  64.  
  65. If Sheets(1).Cells(i, 2) = "1" Then
  66. Print #fn, "<styleUrl>#style1</styleUrl>"
  67. End If
  68. If Sheets(1).Cells(i, 2) = "2" Then
  69. Print #fn, "<styleUrl>#style2</styleUrl>"
  70. End If
  71. If Sheets(1).Cells(i, 2) = "3" Then
  72. Print #fn, "<styleUrl>#style3</styleUrl>"
  73. End If
  74. If Sheets(1).Cells(i, 2) = "4" Then
  75. Print #fn, "<styleUrl>#style4</styleUrl>"
  76. End If
  77.  
  78. Print #fn, "<Point>"
  79. Print #fn, "<coordinates>" & Sheets(1).Cells(i, 5) & "," & Sheets(1).Cells(i, 6) & "</coordinates>"
  80. Print #fn, "</Point>"
  81. Print #fn, "</Placemark>"
  82.  
  83. End If
  84. Next i
  85. Print #fn, "</Document>"
  86. Print #fn, "</kml>"
  87.  
  88. Close fn
  89. strMessage = "File saved" & strFileName & "'."
  90. Else
  91. strMessage = "Ошибка!"
  92. End If
  93. MsgBox strMessage
  94. End Sub 'конец макроса преобразования
  95.  
  96. Function ChangeFileCharset(ByVal filename$, ByVal DestCharset$, _
  97. Optional ByVal SourceCharset$) As Boolean
  98. ' функция перекодировки (смены кодировки) текстового файла
  99. ' В качестве параметров функция получает путь filename$ к текстовому файлу,
  100. ' и название кодировки DestCharset$ (в которую будет переведён файл)
  101. ' Функция возвращает TRUE, если перекодировка прошла успешно
  102. On Error Resume Next: Err.Clear
  103. With CreateObject("ADODB.Stream")
  104. .Type = 2
  105. If Len(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку
  106. .Open
  107. .LoadFromFile filename$ ' загружаем данные из файла
  108. FileContent$ = .ReadText ' считываем текст файла в переменную FileContent$
  109. .Close
  110. .Charset = DestCharset$ ' назначаем новую кодировку
  111. .Open
  112. .WriteText FileContent$
  113. .SaveToFile filename$, 2 ' сохраняем файл уже в новой кодировке
  114. .Close
  115. End With
  116. ChangeFileCharset = Err = 0
  117. End Function

Решение задачи: «Перекодировка текстового файла»

textual
Листинг программы
  1. ChangeFileCharset strFileName, "UTF-8", "Windows-1251" 'вызов процедуры

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут