Страницы: 1
RSS
Экспорт в текстовый фаил в формат utf-8
 
Здравствуйте! Есть простой макрос  для сохранения таблицы в текстовый формат
Код
 Sub Mokus()
Const defPath = "c:\temp\"  'Путь к папке для сохранения файлов
Dim fileSaveName, rr As Range, n As Integer, i As Integer
If Dir(defPath, vbDirectory) = "" Then MkDir defPath
ChDir defPath
fileSaveName = Application.GetSaveAsFilename(Replace(ActiveWorkbook.Name, ".xls", ""), _
    "Text Files (*.html), *.html", , "Сохранение без лишних кавычек :)")
If fileSaveName <> False Then
    Open fileSaveName For Output As #1
    For Each rr In ActiveSheet.UsedRange.Rows
     n = rr.Cells.Count
     For i = 1 To n - 1
      Print #1, rr.Cells(i).Text;
     Next
     Print #1, rr.Cells(n)
    Next
Close #1
End If
End Sub
он работает, но нужно чтобы итоговый файл в utf-8
но если вставляю эту функцию
Код
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
то появляется ошибка Expected End Sub
когда дописываю End Sub ничего не меняется. Как можно перекодировку в utf-8 сделать?
 
куда вставляете-то? отсюда ж не видно
но, судя по ошибке - вставляете совершенно неправильно.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
теперь вставил в начало, ошибка исчезла, но файл все равно не в utf-8

Код
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
Код
Sub Mokus()
Код
Const defPath = "c:\temp\"  'Путь к папке для сохранения файлов
Dim fileSaveName, rr As Range, n As Integer, i As Integer
If Dir(defPath, vbDirectory) = "" Then MkDir defPath
ChDir defPath
fileSaveName = Application.GetSaveAsFilename(Replace(ActiveWorkbook.Name, ".xls", " "), _
    "Text Files (*.html), *.html", , "Сохранение без лишних кавычек :)")
If fileSaveName <> False Then
    Open fileSaveName For Output As #1
    For Each rr In ActiveSheet.UsedRange.Rows
     n = rr.Cells.Count
     For i = 1 To n - 1
      Print #1, rr.Cells(i).Text;
     Next
     Print #1, rr.Cells(n)
    Next
    
    
    
    
Close #1
End If
ChangeFileCharset defPath + fileSaveName, "utf-8"
End Sub

точнее фунция срабатывает но текст в фаиле становится таким 搼癩椠㵤猢潴敲牁慥•瑳汹㵥搢獩 ,а мне нужен utf-8
Изменено: heeg.ru - 15.02.2015 23:53:03
 
Так не ругается
Скрытый текст
Изменено: Doober - 15.02.2015 23:47:59
 
Спасибо! Всё работает  :)
 
А что - FileSystemObject не позволяет сохранять в юникоде?
Код
Sub f()

    Dim r
    Dim fso As Object 'FileSystemObject
    Dim txt As Object 'TextStream

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile("C:\Temp\1.csv", 1, 1) 'Последний параметр - Unicode
    
    For r = 1 to 10
        txt.WriteLine "I am text"
    Next
    txt.Close

End Sub
There is no knowledge that is not power
 
Приношу извинения SuperCat за обесценивание помощи  и я очень благодарна, что вы откликнулись. Но к сожалению, мою проблему это не решило, буду искать варианты решения дальше.
 
Вопрос не по теме, Вам сколько раз писать?!
Раскидывать вопрос по разным темам легче, чем свою создать?
 
vikttur
Код один. Темы плодить не хочу.
Да и автору темы пригодится.
 
Дилоговое окно можно прикрутить не только к этому коду.
Страницы: 1
Читают тему
Наверх