Страницы: 1
RSS
Проблема с кодировкой при чтении txt файла через VBA в Excel
 
Добрый день, написал макрос для чтения txt файла и занесения информации в Эксель. Но при чтении на этапе вот этой команды:
Код
txt = CreateObject("scripting.filesystemobject").OpenTextFile(Filename, 1, True).ReadAll

происходит неверное распознавание русских символов. Пробовал 3 варианта последнего параметра для функции OpenTextFile (-2, -1, 0), но это не помогло, во всех трех случаях все равно буквы не распознаются.

Помогите пожалуйста, кто то сталкивался, как можно решить проблему?  
Изменено: DopplerEffect - 18.01.2022 16:06:54
 
Код
ChangeFileCharset Filename,  "Windows-1251", "UTF-8"
txt = CreateObject("scripting.filesystemobject").OpenTextFile(Filename, 1, True).ReadAll

....

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
 
А зачем эти танцы с бубном, если знаем кодировку
Код
Function Read_Text(Путь_К_Файлу As String) As String
    With CreateObject("ADODB.Stream")
    .Type = 2
    .Charset = "utf-8"
    .Open
    .LoadFromFile Путь_К_Файлу
    Read_Text = .ReadText
    .Close
   End With
End Function
 
МатросНаЗебре, Попробовал ваш способ, но все русские буквы заменились на знаки вопроса.
Изменено: DopplerEffect - 18.01.2022 16:49:44
 
doober, этим способом тоже получаются знаки вопросов вместо всех букв.
Изменено: DopplerEffect - 18.01.2022 16:49:29
 
Если 2 разных макроса не работают, значит проблема не в них
У меня отработал без проблем
Изменено: doober - 18.01.2022 17:23:31
 
Цитата
DopplerEffect: русские буквы заменились на знаки вопроса
перед копированием кода смените раскладку клавиатуры на RU
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Это еще зависит от версии Эксель. Excel2002 не откроет файл в кодировке UTF-8. Сначала надо перекодировать сам текстовый файл потом открывать. Excel2010 у меня открывает. Если надо просто открыть файл ручками, чтобы было не кривая кодировка.
Порядок
1. Запускаем Эксель
2. Открываем окно открытия документов в поле тип файлов выбираем все файлы потом находим необходимый текстовый файл
3. Как по нему щелкнем должно появиться окно выбора кодировки. Выбираем UTF-8
Но все равно немного странно у меня не распознается символ рубля остальное нормально. Причем точно также и в Word и Notepad++ и блокнот.
Через макрос надо по другому правда откроется в новом окне. Раз сами писали макрос разберетесь как доработать
Код
Sub Макрос1()
    Workbooks.OpenText Filename:= _
        "C:\Documents and Settings\SEN\Мои документы\Downloads\Пример отчета за период.txt" _
        , Origin:=65001, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
End Sub
 
Уважаемые знатоки, просвятите плз
Как же все таки читать текстовые кирилические файлы utf-8

Пока удалось только открывать файл через Workbooks.OpenText тогда кирилица сохраняется

Sub ReadTextFileRu()
   Workbooks.OpenText filename:="C:\a1.txt", Origin:=65001
   Columns("A:A").Copy
End Sub
----------------через open кракозябры------------------------------
Sub ReadOpen TextFile1()
   Dim fileContent As String
   Dim dataArray() As String
   Dim i As Integer

   Open "C:\a1.txt" For Input As #1
   fileContent = Input$(LOF(1), 1)
   Close #1
   
   dataArray = Split(fileContent, vbCrLf)
   For i = 0 To UBound(dataArray)
       Range("B" & (i + 1)) = dataArray(i)
   Next i
End Sub
----------------через open кракозябры------------------------------
Sub ReadTextFile2()
   With CreateObject("Scripting.FileSystemObject")
       ' Try use UTF-8
       With .OpenTextFile("C:\a1.txt", 1, False, -1)
           fileContent = .ReadAll
           .Close
       End With
   End With

   fileLines = Split(fileContent, vbCrLf)
   For i = 0 To UBound(fileLines)
       Range("B" & (i + 1)) = fileLines(i)
   Next i
End Sub
Страницы: 1
Наверх