Страницы: 1
RSS
Кодировка файла .txt в vba, Кодировка файла .txt в vba
 
Написал несколько макросов VBA в Excel 2021
Все следующего вида:

Open "C:\BC01_TXT.txt" For Output As #1

Print #1, Sheets("Sheet1").Cells(I, 4)
Обработка ячеек excel
Print #1, Sheets("Sheet1").Cells(I, 6)
...

Close #1

При этом некоторые макросы сохраняют файл в кодировке ANSI, а некоторые в UTF-8
В ANSI русские буквы читаются нормально, а в UTF-8 - каракули.

Подскажите как решить эту проблему. Например, чтобы все файлы были ANSI.

Когда запускаю те же макросы в EXCEL 2016, то все работает нормально (все файлы ANSI)
 
Илья, не самый простой вопрос(( даже на этом форуме, прикопипасте кода, надо соблюдать определенную раскладку клавы. Ответа у меня нет, сорри. Чтоб я такое знал, но, походу, даже тут, решение еще не найдено((( p.s. подпишусь на тему, вдруг кто знает как бороться)
Изменено: DerToDD - 24.04.2025 00:10:37
 
Здравствуйте.
Можете выложить пару файлов - один который выгружается в ANSI и второй, который выгружается в UTF-8?
 
Цитата
Илья написал:
Когда запускаю те же макросы в EXCEL 2016, то все работает нормально (все файлы ANSI)
Предположу что разные не только версии Excel но и это разные машины. Так?
По вопросам из тем форума, личку не читаю.
 
Aлeкceй, БМВ, Да, машины разные. И похоже дело не в макросе.
Изначально (лет 7 назад))) была задача генерации .txt файла из таблицы Excel для загрузки его в Adobe Indesign. С файлами ANSI возникла проблема с русским языком. И она была решена путем генерации файла ANSI и последующим пересохранением его Блокнотом в Unicode. Все прекрасно работало несколько лет пока на пришлось все делать на новом компе (Windows11, Excel 2021).
Последние 2 дня пробовал самые разные комбинации и в итоге пришел к следующему выводу. И старый и новый комп после отработки макроса выдают .txt в формате ANSI. Далее "Старый" Блокнот все пересохраняет как надо и все работает, а если пересохранять в новом Блокноте, то многие параметры сбиваются. Причем файл ANSI в новом блокноте может открыться с потерей русских символов и при попытке сделать "Сохранить как" показывает кодировку UTF-8  
Прикладываю файлы:

BC01_TXT_ansi.txt - после отработки макроса
BC01_TXT_ANSI_Unicode.txt - пересохраненный на старом компе и дальше корректно грузится в Indesign
BC01_TXT_UTF-16LE.txt - пересохраненный на новом компе и дальше некорректно грузится в Indesign
Изменено: Илья - 25.04.2025 18:26:19
 
 
У меня Notepad++ показывает что у файла BC01_TXT_ansi.txt кодировка Macintosh. Так и задумано?
Изменено: Aлeкceй - 25.04.2025 21:07:56
 
Aлeкceй, нет, это файл полученный после:

Open "C:\BC01_TXT.txt" For Output As #1

Print #1, Sheets("Sheet1").Cells(I, 4)
Обработка ячеек excel
Print #1, Sheets("Sheet1").Cells(I, 6)
...

Close #1
 
Давайте попробуем заменить блокнот макросом (он перекодирует ANSI в UTF).
Код
Sub ConvertAnsiToUtf8(aFileName As String)
    Dim outputFile As String
    Dim text As String
    
    ' Имя файла в кодировке UTF-8
    outputFile = Replace(aFileName, ".txt", "_UTF.txt")
    
    ' Чтение файла в кодировке ANSI
    With CreateObject("ADODB.Stream")
        .Type = 2 ' adTypeText
        .Charset = "windows-1251" ' или "iso-8859-1" для западноевропейской кодировки
        .Open
        .LoadFromFile aFileName
        text = .ReadText
        .Close
    End With
    
    ' Запись файла в кодировке UTF-8
    With CreateObject("ADODB.Stream")
        .Type = 2 ' adTypeText
        .Charset = "utf-8"
        .Open
        .WriteText text
        .SaveToFile outputFile, 2 ' adSaveCreateOverWrite
        .Close
    End With
    
    MsgBox "Файл успешно перекодирован в UTF-8", vbInformation
End Sub

'Пример вызова процедуры конвертации
Sub test()
'Измените имя файла "d:\Wrk\4\Win32\Debug\al.txt" на имя своего файла 
  Call ConvertAnsiToUtf8("d:\Wrk\4\Win32\Debug\al.txt")
End Sub

 
Изменено: Aлeкceй - 26.04.2025 07:50:45
 
Сделал конвертацию  ConvertAnsiToUtf8()
Файл конвертировался успешно.
Но в результате получился файл такой же как и при пересохранении в старом Блокноте в кодировку UTF-8. При загрузке в InDesign все форматирование не воспринимается. "Верный" файл получается при пересохранении в старом Блокноте в кодировку "Юникод"

Dostavka_TXT.txt - файл                   после Макроса
Dostavka_TXT_Utf-8.txt 1.41 КБ        Блокнот - UTF-8
Dostavka_TXT_Юникод.txt 2.4 КБ     Блокнот Юникод
Dostavka_TXT_UTF.txt 1.41 КБ         после ConvertAnsiToUtf8()
 
 
Кажется проблема решена.
В вашем коде я заменил .Charset = "utf-8" на .Charset = "Unicode"  и все заработало!!!
Спасибо большое!
Изменено: Илья - 27.04.2025 15:02:44
Страницы: 1
Читают тему
Наверх