Страницы: 1
RSS
Научить excel открывать utf8 по умолчанию, не меняя кодировки файла, без дополнительных действий
 
Добрый день, просьба не закидывать тряпками, я честно гуглил в течение двух дней.
Есть файл csv в кодировке utf-8, на некоторых компьютерах Excel даблкликом открывает его сразу отлично, а на моём, например, я вижу кракозябры "ениваР". То есть мой эксель почему-то применяет кодировку 1251, а у некоторых коллег всё ок на этом же файле, с тем же 2007 офисом.
Особенность эта давно, и я обычно не обращал внимания: данные-получить внешние данные-из текста-кодировка UTF-8, - и работаю дальше.
Теперь столкнулся с тем, что в источнике, из которого формируются csvшки, в некоторых ячейках есть символ переноса строки, и если я использую импорт текста(из csvв эксель), то строка переносится там, где мне не надо, при даблклике же парсер съедает этот перенос строки, но не та кодировка.
Помогает Notepad++ Encoding-Convert to ANSI, но это тоже неудобно.
Изменить формат выгрузки csv не в моей компетенции.
Найти место, где меняется кодировка открытия файла по умолчанию в экселе, я не смог.
Просьба помочь в решении проблемы, заранее благодарю.
 
Excel не научить
Можно написать простенький макрос для перекодирования файла
Открыли файл, увидели если кракозябры, - нажали кнопку, и макрос закрыл файл, перекодировал, и открыл снова

Основу для макроса тут можно найти
http://excelvba.ru/code/savetexttofile
http://excelvba.ru/code/Encode
Код
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

PS: как вариант, пользуйтесь бесплатным офисным пакетом OpenOffice, - он понимает CSV в кодировке UTF-8
 
Цитата
Игорь написал: Excel не научить
Ну, вот в соседнем кабинете сидит 2 человека, и у одного из них научен, а у другого тоже нет. Так что смею делать вывод, что всё же как-то можно.

За макрос спасибо, но таким же образом можно и в блокноте менять кодировку, небольшая разница.
К опенофису стойкая неприязнь, возможно незаслуженная, но всё же.
 
Я про макрос не знал, а использовал Notepad++ для перекодировки в файле (открываешь руками, нажимаешь перекодировку, сохраняешь). Если раз в месяц этим заниматься, то нормально. А вот если чаще, то беда...надо видимо макросом.
 
Проблема решилась накатыванием патча. На билде 12.0.4518.1014 не работало, на 12.0.6611.1000 все ок стало.
 
Цитата
написал:
Excel не научить
Можно написать простенький макрос для перекодирования файла
Открыли файл, увидели если кракозябры, - нажали кнопку, и макрос закрыл файл, перекодировал, и открыл снова

Основу для макроса тут можно найти
http://excelvba.ru/code/savetexttofile
http://excelvba.ru/code/Encode
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22      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   
 
PS: как вариант, пользуйтесь бесплатным офисным пакетом OpenOffice, - он понимает CSV в кодировке UTF-8
Та же проблема с экселем, открывает не в UTF8 и потому кракозябры вместо кириллицы. Не удалось даже записать макрос, чтобы его потом выполнить, можете разжевать, как мне записать и использовать ваш макрос?
Страницы: 1
Наверх