Все способы:
- Работа с кодировкой текста
- Способ 1: изменение кодировки с помощью Notepad++
- Способ 2: применение Мастера текстов
- Способ 3: сохранение файла в определенной кодировке
- Вопросы и ответы: 19
С потребностью менять кодировку текста часто сталкиваются пользователи, работающие браузерах, текстовых редакторах и процессорах. Тем не менее, и при работе в табличном процессоре Excel такая необходимость тоже может возникнуть, ведь эта программа обрабатывает не только цифры, но и текст. Давайте разберемся, как изменить кодировку в Экселе.
Урок: Кодировка в Microsoft Word
Работа с кодировкой текста
Кодировка текста – эта набор электронных цифровых выражений, которые преобразуются в понятные для пользователя символы. Существует много видов кодировки, у каждого из которых имеются свои правила и язык. Умение программы распознавать конкретный язык и переводить его на понятные для обычного человека знаки (буквы, цифры, другие символы) определяет, сможет ли приложение работать с конкретным текстом или нет. Среди популярных текстовых кодировок следует выделить такие:
- Windows-1251;
- KOI-8;
- ASCII;
- ANSI;
- UKS-2;
- UTF-8 (Юникод).
Последнее наименование является самым распространенным среди кодировок в мире, так как считается своего рода универсальным стандартом.
Чаще всего, программа сама распознаёт кодировку и автоматически переключается на неё, но в отдельных случаях пользователю нужно указать приложению её вид. Только тогда оно сможет корректно работать с кодированными символами.
Наибольшее количество проблем с расшифровкой кодировки у программы Excel встречается при попытке открытия файлов CSV или экспорте файлов txt. Часто, вместо обычных букв при открытии этих файлов через Эксель, мы можем наблюдать непонятные символы, так называемые «кракозябры». В этих случаях пользователю нужно совершить определенные манипуляции для того, чтобы программа начала корректно отображать данные. Существует несколько способов решения данной проблемы.
Способ 1: изменение кодировки с помощью Notepad++
К сожалению, полноценного инструмента, который позволял бы быстро изменять кодировку в любом типе текстов у Эксель нет. Поэтому приходится в этих целях использовать многошаговые решения или прибегать к помощи сторонних приложений. Одним из самых надежных способов является использование текстового редактора Notepad++.
- Запускаем приложение Notepad++. Кликаем по пункту «Файл». Из открывшегося списка выбираем пункт «Открыть». Как альтернативный вариант, можно набрать на клавиатуре сочетание клавиш Ctrl+O.
- Запускается окно открытия файла. Переходим в директорию, где расположен документ, который некорректно отобразился в Экселе. Выделяем его и жмем на кнопку «Открыть» в нижней части окна.
- Файл открывается в окне редактора Notepad++. Внизу окна в правой части строки состояния указана текущая кодировка документа. Так как Excel отображает её некорректно, требуется произвести изменения. Набираем комбинацию клавиш Ctrl+A на клавиатуре, чтобы выделить весь текст. Кликаем по пункту меню «Кодировки». В открывшемся списке выбираем пункт «Преобразовать в UTF-8». Это кодировка Юникода и с ней Эксель работает максимально корректно.
- После этого, чтобы сохранить изменения в файле жмем на кнопку на панели инструментов в виде дискеты. Закрываем Notepad++, нажав на кнопку в виде белого крестика в красном квадрате в верхнем правом углу окна.
- Открываем файл стандартным способом через проводник или с помощью любого другого варианта в программе Excel. Как видим, все символы теперь отображаются корректно.
Несмотря на то, что данный способ основан на использовании стороннего программного обеспечения, он является одним из самых простых вариантов для перекодировки содержимого файлов под Эксель.
Способ 2: применение Мастера текстов
Кроме того, совершить преобразование можно и с помощью встроенных инструментов программы, а именно Мастера текстов. Как ни странно, использование данного инструмента несколько сложнее, чем применение сторонней программы, описанной в предыдущем методе.
- Запускаем программу Excel. Нужно активировать именно само приложение, а не открыть с его помощью документ. То есть, перед вами должен предстать чистый лист. Переходим во вкладку «Данные». Кликаем на кнопку на ленте «Из текста», размещенную в блоке инструментов «Получение внешних данных».
- Открывается окно импорта текстового файла. В нем поддерживается открытие следующих форматов:
- TXT;
- CSV;
- PRN.
Переходим в директорию размещения импортируемого файла, выделяем его и кликаем по кнопке «Импорт».
- Открывается окно Мастера текстов. Как видим, в поле предварительного просмотра символы отображаются некорректно. В поле «Формат файла» раскрываем выпадающий список и меняем в нем кодировку на «Юникод (UTF-8)».
Если данные отображаются все равно некорректно, то пытаемся экспериментировать с применением других кодировок, пока текст в поле для предпросмотра не станет читаемым. После того, как результат удовлетворит вас, жмите на кнопку «Далее».
- Открывается следующее окно Мастера текста. Тут можно изменить знак разделителя, но рекомендуется оставить настройки по умолчанию (знак табуляции). Жмем на кнопку «Далее».
- В последнем окне имеется возможность изменить формат данных столбца:
- Общий;
- Текстовый;
- Дата;
- Пропустить столбец.
Тут настройки следует выставить, учитывая характер обрабатываемого контента. После этого жмем на кнопку «Готово».
- В следующем окне указываем координаты левой верхней ячейки диапазона на листе, куда будут вставлены данные. Это можно сделать, вбив адрес вручную в соответствующее поле или просто выделив нужную ячейку на листе. После того, как координаты добавлены, в поле окна жмем кнопку «OK».
- После этого текст отобразится на листе в нужной нам кодировке. Остается его отформатировать или восстановить структуру таблицы, если это были табличные данные, так как при переформатировании она разрушается.
Способ 3: сохранение файла в определенной кодировке
Бывает и обратная ситуация, когда файл нужно не открыть с корректным отображением данных, а сохранить в установленной кодировке. В Экселе можно выполнить и эту задачу.
- Переходим во вкладку «Файл». Кликаем по пункту «Сохранить как».
- Открывается окно сохранения документа. С помощью интерфейса Проводника определяем директорию, где файл будет храниться. Затем выставляем тип файла, если хотим сохранить книгу в формате отличном от стандартного формата Excel (xlsx). Потом кликаем по параметру «Сервис» и в открывшемся списке выбираем пункт «Параметры веб-документа».
- В открывшемся окне переходим во вкладку «Кодировка». В поле «Сохранить документ как» открываем выпадающий список и устанавливаем из перечня тот тип кодировки, который считаем нужным. После этого жмем на кнопку «OK».
- Возвращаемся в окно «Сохранения документа» и тут жмем на кнопку «Сохранить».
Документ сохранится на жестком диске или съемном носителе в той кодировке, которую вы определили сами. Но нужно учесть, что теперь всегда документы, сохраненные в Excel, будут сохраняться в данной кодировке. Для того, чтобы изменить это, придется опять заходить в окно «Параметры веб-документа» и менять настройки.
Существует и другой путь к изменению настроек кодировки сохраненного текста.
- Находясь во вкладке «Файл», кликаем по пункту «Параметры».
- Открывается окно параметров Эксель. Выбираем подпункт «Дополнительно» из перечня расположенного в левой части окна. Центральную часть окна прокручиваем вниз до блока настроек «Общие». Тут кликаем по кнопке «Параметры веб-страницы».
- Открывается уже знакомое нам окно «Параметры веб-документа», где мы проделываем все те же действия, о которых говорили ранее.
Теперь любой документ, сохраненный в Excel, будет иметь именно ту кодировку, которая была вами установлена.
Как видим, у Эксель нет инструмента, который позволил бы быстро и удобно конвертировать текст из одной кодировки в другую. Мастер текста имеет слишком громоздкий функционал и обладает множеством не нужных для подобной процедуры возможностей. Используя его, вам придется проходить несколько шагов, которые непосредственно на данный процесс не влияют, а служат для других целей. Даже конвертация через сторонний текстовый редактор Notepad++ в этом случае выглядит несколько проще. Сохранение файлов в заданной кодировке в приложении Excel тоже усложнено тем фактом, что каждый раз при желании сменить данный параметр, вам придется изменять глобальные настройки программы.
Наша группа в TelegramПолезные советы и помощь
Ну положим, пишет в одну ячейку не скрипт, а Вы — что Вы ему сказали делать, то и делает…
Я думал, сообразите или найдёте пример, куда этот text далее направить.
Например, вот готовый код по преобразованию текста. Тут всё есть. Вам нужна вторая, третья и последние три строки:
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject(«Scripting.FileSystemObject»)
Set objFile = objFSO.OpenTextFile(«c:\test.txt», ForReading)
strText = objFile.ReadAll
objFile.Close
strText = Replace(strText, «,», » «)
strText = Replace(strText, «»»», » «)
Set objFile = objFSO.OpenTextFile(«c:\test.txt», ForWriting)
objFile.Write strText
objFile.Close
А кстати вариант с OLEPRNLib мне нравится больше. В ХР содержится изначально, про другие не знаю.
Если при импорте контактов вы видите нечитаемые символы, как на скриншоте, это значит, что кодировка файла не подходит для импорта в Unisender. Файл нужно перекодировать в UTF-8. Далее мы расскажем, как это сделать в Excel.
Создаем и открываем новый Excel файл.
Переходим на вкладку «Данные», выбираем «Получение внешних данных», а далее — «Из текста».
В окне для импорта текстового файла выбираем файл с неверной кодировкой и нажимаем кнопку «Импорт».
Открывается мастер импорта текста.
С текущей кодировкой содержимое файла нечитабельное.
В поле «Формат файла» перебираем кодировки, пока не найдём ту, в которой текст отображается правильно. Вариантов много, поэтому можно начать с форматов, которые начинаются со слова «Кириллица». Находим нужный формат, нажимаем «Далее».
Выбираем символы-разделители. В нашем случае это запятая.
Нажимаем «Далее» — «Готово» — «OK»
Так выглядит импортированный текст в Excel.
Теперь нажимаем «Файл» — «Сохранить как».
Выбираем место, где будет храниться файл. Вводим название файла, тип файла выбираем CSV, ниже нажимаем «Сервис» — «Параметры веб-документа».
Переходим на вкладку «Кодировка», выбираем «Юникод UTF-8» и нажимаем «OK».
Файл сохранён.
Теперь импортируем его и видим, что текст отображается корректно.
Полезные ссылки
Как подготовить контакты к импорту
Как импортировать контакты
Как импортировать номера телефонов
Что такое отчёт об ошибках при импорте
Как очистить базу от неактивных контактов
Функции ChangeFileCharset и ChangeTextCharset предназначены для изменения кодировки символов в текстовых файлах и строках.
Исходную и конечную (желаемую) кодировку можно задать в параметрах вызова функций.
ВНИМАНИЕ: Функции чтения и сохранения текста в файл в заданной кодировке
Список доступных на вашем компьютере кодировок можно найти в реестре Windows в ветке
HKEY_CLASSES_ROOT\MIME\Database\Charset
Среди доступных кодировок есть koi8-r, ascii, utf-7, utf-8, Windows-1250, Windows-1251, Windows-1252, и т.д. и т.п.
Определить исходную и конечную кодировку можно, воспользовавшись онлайн-декодером:
http://www.artlebedev.ru/tools/decoder/advanced/
(после преобразования снизу будет написано, из какой кодировки в какую переведён текст)
Sub ПримерИспользования_ChangeTextCharset() ИсходнаяСтрока = "бНОПНЯ" ' вызываем функцию ChangeTextCharset с указанием кодировок ' (меняем кодировку с KOI8-R на Windows-1251) ПерекодированнаяСтрока = ChangeTextCharset(ИсходнаяСтрока, "Windows-1251", "KOI8-R") MsgBox "Результат перекодировки: """ & ПерекодированнаяСтрока & """", _ vbInformation, "Исходная строка: """ & ИсходнаяСтрока & """" 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 ChangeTextCharset(ByVal txt$, ByVal DestCharset$, _ Optional ByVal SourceCharset$) As String ' функция перекодировки (смены кодировки) текстовоq строки ' В качестве параметров функция получает текстовую строку txt$, ' и название кодировки DestCharset$ (в которую будет переведён текст) ' Функция возвращает текст в новой кодировке On Error Resume Next: Err.Clear With CreateObject("ADODB.Stream") .Type = 2: .Mode = 3 If Len(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку .Open .WriteText txt$ .Position = 0 .Charset = DestCharset$ ' назначаем новую кодировку ChangeTextCharset = .ReadText .Close End With End Function
‘ Функция для перекодировки файла в UTF-8 без BOM (то же самое, что и UTF-8, только без первых 3 байтов)
Function ChangeFileCharset_UTF8noBOM(ByVal filename$, Optional ByVal SourceCharset$) As Boolean ' функция перекодировки (смены кодировки) текстового файла ' В качестве параметров функция получает путь filename$ к текстовому файлу, ' Функция возвращает TRUE, если перекодировка прошла успешно On Error Resume Next: Err.Clear DestCharset$ = "utf-8" With CreateObject("ADODB.Stream") .Type = 2 If Len(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку .Open .LoadFromFile filename$ ' загружаем данные из файла FileContent$ = .ReadText ' считываем текст файла в переменную FileContent$ .Close .Charset = DestCharset$ ' назначаем новую кодировку "utf-8" .Open .WriteText FileContent$ 'Write your data into the stream. Dim binaryStream As Object Set binaryStream = CreateObject("ADODB.Stream") binaryStream.Type = 1 binaryStream.Mode = 3 binaryStream.Open 'Skip BOM bytes .Position = 3 .CopyTo binaryStream .Flush .Close binaryStream.SaveToFile filename$, 2 binaryStream.Close End With ChangeFileCharset_UTF8noBOM = Err = 0 End Function
Функция перекодировки текста в UTF-8 без BOM
Function EncodeUTF8noBOM(ByVal txt As String) As String For i = 1 To Len(txt) l = Mid(txt, i, 1) Select Case AscW(l) Case Is > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l) Mod 64) Case Is > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l) Mod 64) Case Else: t = l End Select EncodeUTF8noBOM = EncodeUTF8noBOM & t Next End Function
- 156693 просмотра
Макросы в Excel VBA Макросы Смена кодировки
Смена кодировки
Excel всё норовит сохранять текстовые файлы в Winodws-1251. Очень актуален вопрос преобразования текста в другие кодировки, в первую очередь в UTF-8.
Вот несколько полезных функций для решения подобных вопросов:
Перекодировка файла из кодировки SourceCharset$ в UTF-8
'filename - путь к файлу
'SourceCharset - исходная кодировка (необязательный параметр)
'BomDelete - удалять ли BOM?
Function ChangeFileCharset_UTF8noBOM(ByVal filename$, _
Optional ByVal SourceCharset$, _
Optional BomDelete As Boolean = True) As Boolean
On Error Resume Next: Err.Clear
Dim DestCharset As String 'Кодировка
DestCharset = "utf-8"
Dim FileContent As Variant
With CreateObject("ADODB.Stream")
.Type = 2
'Исходная кодировка, если указана
If Len(SourceCharset$) Then .Charset = SourceCharset$
.Open
.LoadFromFile filename$ 'Загружаем данные из файла
'Считываем текст в переменную FileContent
FileContent = .ReadText
.Close 'Закрываепм файл
'Назначаем файлу новую кодировку "utf-8"
.Charset = DestCharset
.Open 'Снова открываепм файл
'Записываем текст в файл в новой кодировке
.WriteText FileContent
'Удалить BOM?
If BomDelete Then
Dim binaryStream As Object
Set binaryStream = CreateObject("ADODB.Stream")
binaryStream.Type = 1
binaryStream.Mode = 3
binaryStream.Open
'Удаляем BOM байты
.Position = 3
.CopyTo binaryStream
.Flush
.Close
binaryStream.SaveToFile filename$, 2
binaryStream.Close
End If
End With
ChangeFileCharset_UTF8noBOM = Err = 0
End Function
Сохраняет текст в указанной кодировке в файл
'Функция сохраняет текст txt
'в кодировке Charset$ в файл filename$
'koi8-r, ascii, utf-7, utf-8, utf-8noBOM,
'utf-16, windows-1251, unicode и другие
Function SaveTextToFile(ByVal txt$, ByVal filename$, _
Optional ByVal encoding$ = "utf-8noBOM") As Boolean
Dim FSO As Object
Dim ts As Object
Dim binaryStream As Object
On Error Resume Next: Err.Clear
Select Case encoding$
Case "windows-1251", "", "ansi"
Set FSO = CreateObject("scripting.filesystemobject")
Set ts = FSO.CreateTextFile(filename, True)
ts.Write txt: ts.Close
Set ts = Nothing: Set FSO = Nothing
Case "utf-16", "utf-16LE"
Set FSO = CreateObject("scripting.filesystemobject")
Set ts = FSO.CreateTextFile(filename, True, True)
ts.Write txt: ts.Close
Set ts = Nothing: Set FSO = Nothing
Case "utf-8noBOM"
With CreateObject("ADODB.Stream")
.Type = 2: .Charset = "utf-8": .Open
.WriteText txt$
Set binaryStream = CreateObject("ADODB.Stream")
binaryStream.Type = 1: binaryStream.Mode = 3
binaryStream.Open:
.Position = 3: .CopyTo binaryStream 'Skip BOM bytes
.Flush: .Close
binaryStream.SaveToFile filename$, 2
binaryStream.Close
End With
Case Else
With CreateObject("ADODB.Stream")
.Type = 2: .Charset = encoding$: .Open
.WriteText txt$
'Сохраняем файл в заданной кодировке
.SaveToFile filename$, 2
.Close
End With
End Select
SaveTextToFile = Err = 0: DoEvents
End Function
Перекодировка строки
Function ChangeTextCharset(ByVal txt$, ByVal DestCharset$, _
Optional ByVal SourceCharset$) As String
If Trim(txt$) = "" Then
ChangeTextCharset = ""
Else
On Error Resume Next: Err.Clear
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
'Исходная кодировка
If Len(SourceCharset$) Then .Charset = SourceCharset$
.Open
.WriteText txt$
.Position = 0
.Charset = DestCharset$ 'Назначаем новую кодировку
ChangeTextCharset = .ReadText
.Close
End With
End If
End Function
Перекодировка файла
'False если не получилось
Function ChangeFileCharset(filename As String, _
DestCharset As String, _
Optional SourceCharset As String) As Boolean
Dim FileContent As String 'Содержимое файла
On Error Resume Next: Err.Clear
With CreateObject("ADODB.Stream")
.Type = 2
'Если начальная кодировка задана явно то отмечаем её
If Len(SourceCharset) Then .Charset = SourceCharset
.Open 'Открываем объект ADO
.LoadFromFile filename 'Загружаем в объект файл
FileContent = .ReadText 'Извлекаем контент
.Close 'Закрываем объект
.Charset = DestCharset 'Переустанавливаем кодировку
.Open 'Снова открываем
.WriteText FileContent 'Записываем в него контент
.SaveToFile filename 'Сохраняем по тому же путив файл
.Close 'Окончательно закрываем
End With
ChangeFileCharset = Err = 0 'Успешно?
End Function