Страница: 1 | 2 |
Вопрос: Вывод иностранных символов в Excel
Добавлено: 30.08.07 12:19
Автор вопроса: Nytrogen
Мне необходимо выводить на рабочие листы Excel и в диалоговые окна латышский текст. Дело в том, что в латышском языке встречаются особые символы (будь они прокляты), которых нет в стандартном наборе ASCII, либо они есть, но выводятся как чебурашки. Для их вывода я использую функцию Chr. Не подскажете, как быть?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
Pavel
Вопросов: 0
Ответов: 82
Профиль | | #1
Добавлено: 30.08.07 13:26
точно не знаю, но может в Языки и Региональные стандары - установить поддержку Латышского языка? У мя тоже китайские иероглифы не отображались, пока не подключили Кит. язык и они стали нормально отображаться
Номер ответа: 2
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #2
Добавлено: 30.08.07 18:58
Привет из Латвии.
Проблема на VB решается довольно просто. Если кто не в курсе, то VB свои строковые переменные в памяти хранит в формате Unicode. Проблема только в том, что программист свои исходники пишет в ASCII кодировке, и строковые переменные переводятся в Unicode используя текущие региональные настройки (подозреваю, что у автора вопроса они как раз таки русские).
Алгоритм решения прост и заключается в двойной переконвертации строк - сначала в настоящую ASCII цепочку байтов, и потом обратно в Unicode с использованием номера латышской локали (LCID).
На практике это выглядит так:
' параметр s - это латышское слово
'
Dim b() As Byte ' для ASCII цепочки
Dim r As String ' для результата
'
b = StrConv(s, vbFromUnicode) ' UC -> ASCII
r = StrConv(b, vbUnicode, 1062) ' ASCII -> UC
'
' Волшебное число:
' 1062 - LCID Латвийского региона!
'
ToLatvian = r
'
End Function
Номер ответа: 3
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #3
Добавлено: 31.08.07 15:20
Спасибо конечно же, но как пользоваться этой функцией? Я же не могу в коде VBA ввести латышскую строку. Если в качестве аргумента я передаю Chr(i), то латышские символы всё равно не выводятся...
Номер ответа: 4
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #4
Добавлено: 31.08.07 16:02
Эм.. Просто переключайся на латышскую раскладку, печатай латышские слова и не обращай внимание на то, что латышские символы будут выглядеть неправильно. На выходе - в ячейках - ты будешь получать чистый латышский текст.
Например:
s = "paplaðinâðana"
ActiveCell.FormulaR1C1 = ToLatvian(s)
Номер ответа: 5
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #5
Добавлено: 31.08.07 16:06
Вот именно этот кусок кода скопируй в код нового макроса и запусти:
s = "paplaрinврana"
ActiveCell.FormulaR1C1 = ToLatvian(s)
Получишь слово на латышском.
Номер ответа: 6
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #6
Добавлено: 31.08.07 16:52
Если бы! В активной ячейке появляется "papla?in??ana". Может всё же дело в Excel?
Номер ответа: 7
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #7
Добавлено: 31.08.07 18:28
Тогда единственный встречный вопрос:
У тебя Windows XP или 95/98?
Номер ответа: 8
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #8
Добавлено: 31.08.07 19:37
Так, всё ясно... Vista! В XP всё работает. Спасибо огромное. А то я просто замучался с этим латышским!
Номер ответа: 9
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #9
Добавлено: 31.08.07 21:46
Правда латышский идёт, если выводишь на рабочий лист, а вот если в MsgBox, то выводятся английские символы... Так и должно быть?
Номер ответа: 10
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #10
Добавлено: 02.09.07 12:32
Сорри за задержку - не было времени
MsgBox - это чисто системная функция, она Unicode не поддерживает. Поэтому используй офисный вариант диалоговых окошек - метод Application.Assistant.DoAlert(). Там латышские символы отображаются как надо.
Номер ответа: 11
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #11
Добавлено: 04.09.07 19:06
Спасибо, не знал про такую функцию. А как насчёт латышского в пользовательских формах? Например в Caption формы гарумзиме никак не хочет залезать ни при редактировании, ни программно... =(
Номер ответа: 12
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #12
Добавлено: 05.09.07 00:33
К сожалению в VBA нет возможности назначить текст в формате Unicode для заголовка формы класса UserForm. :/
Однако, все контролы на форме спокойно отобразят латышский текст, если присваивать его программно и с использованием той самой функции (ToLatvian).
Кстати, полагаю, речь идет о VBA все еще, а не о чистом VB?
Номер ответа: 13
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #13
Добавлено: 08.09.07 20:37
Жалко, что нет такой возможности. Ну да, про VBA речь идёт...
Так вот что. Я протестировал эту самую фунццию ToLatvian на разных XP-шных компьютерах в Excel 2003. Корректно она работает только на одном из них. Может таки дело в региональных настройках?
Номер ответа: 14
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #14
Добавлено: 08.09.07 22:03
el-paso, всё, что ты сказал в этом топике -- полная чушь.
Nytrogen, если надо хранить в исходнике на VB текст в кодировке, отличной от текущей системной, то делать это можно, только представив текст как строку вида ChrW(1234) & ChrW(2342) & ChrW(5421) & ...
Поскольку это неудобно, заведи скрытый лист, в ячейки которого помести все латышские сообщения. Потом бери их оттуда.
Номер ответа: 15
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #15
Добавлено: 09.09.07 21:21
Неудобно как раз таки брать латышские символы со скрытого листа... А так можно сразу писать в макросе. А вот за функцию ChrW спасибо.