Страница: 1 | 2 | 
		
		 
			   
			 
			 
			 
			 
			
 
  
		
     
  
    
Вопрос: Вывод иностранных символов в Excel
     
    
Добавлено: 30.08.07 12:19
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Nytrogen
 Nytrogen
      
       
  
Мне необходимо выводить на рабочие листы Excel и в диалоговые окна латышский текст. Дело в том, что в латышском языке встречаются особые символы (будь они прокляты), которых нет в стандартном наборе ASCII, либо они есть, но выводятся как чебурашки. Для их вывода я использую функцию Chr. Не подскажете, как быть?
 
    
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 21
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: Pavel
 Pavel








Вопросов: 0
Ответов: 82
      
 Профиль |  | #1
       
Добавлено:  30.08.07 13:26
       
    
       
  
точно не знаю, но может в Языки и Региональные стандары - установить поддержку Латышского языка? У мя тоже китайские иероглифы не отображались, пока не подключили Кит. язык и они стали нормально отображаться
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: el-paso
 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
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #3
       
Добавлено:  31.08.07 15:20
       
    
       
  
Спасибо конечно же, но как пользоваться этой функцией? Я же не могу в коде VBA ввести латышскую строку. Если в качестве аргумента я передаю Chr(i), то латышские символы всё равно не выводятся...
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: el-paso
 el-paso






Вопросов: 0
Ответов: 56
      
 Профиль |  | #4
       
Добавлено:  31.08.07 16:02
       
    
       
  
 
     Эм.. Просто переключайся на латышскую раскладку, печатай латышские слова и не обращай внимание на то, что латышские символы будут выглядеть неправильно. На выходе - в ячейках - ты будешь получать чистый латышский текст.
 Эм.. Просто переключайся на латышскую раскладку, печатай латышские слова и не обращай внимание на то, что латышские символы будут выглядеть неправильно. На выходе - в ячейках - ты будешь получать чистый латышский текст.
Например:
s = "paplaðinâðana"
ActiveCell.FormulaR1C1 = ToLatvian(s)
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: el-paso
 el-paso






Вопросов: 0
Ответов: 56
      
 Профиль |  | #5
       
Добавлено:  31.08.07 16:06
       
    
       
  
Вот именно этот кусок кода скопируй в код нового макроса и запусти:
 
    
s = "paplaрinврana" 
ActiveCell.FormulaR1C1 = ToLatvian(s)
Получишь слово на латышском.
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #6
       
Добавлено:  31.08.07 16:52
       
    
       
  
Если бы! В активной ячейке появляется "papla?in??ana". Может всё же дело в Excel?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: el-paso
 el-paso






Вопросов: 0
Ответов: 56
      
 Профиль |  | #7
       
Добавлено:  31.08.07 18:28
       
    
       
  
Тогда единственный встречный вопрос:
 
    
У тебя Windows XP или 95/98?
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #8
       
Добавлено:  31.08.07 19:37
       
    
       
  
Так, всё ясно... Vista! В XP всё работает. Спасибо огромное. А то я просто замучался с этим латышским!
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #9
       
Добавлено:  31.08.07 21:46
       
    
       
  
Правда латышский идёт, если выводишь на рабочий лист, а вот если в MsgBox, то выводятся английские символы... Так и должно быть?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа: el-paso
 el-paso






Вопросов: 0
Ответов: 56
      
 Профиль |  | #10
       
Добавлено:  02.09.07 12:32
       
    
       
  
Сорри за задержку - не было времени  
     
MsgBox - это чисто системная функция, она Unicode не поддерживает. Поэтому используй офисный вариант диалоговых окошек - метод Application.Assistant.DoAlert(). Там латышские символы отображаются как надо.
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #11
       
Добавлено:  04.09.07 19:06
       
    
       
  
Спасибо, не знал про такую функцию. А как насчёт латышского в пользовательских формах? Например в Caption формы гарумзиме никак не хочет залезать ни при редактировании, ни программно... =(
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа: el-paso
 el-paso






Вопросов: 0
Ответов: 56
      
 Профиль |  | #12
       
Добавлено:  05.09.07 00:33
       
    
       
  
К сожалению в VBA нет возможности назначить текст в формате Unicode для заголовка формы класса UserForm. :/
 
    
Однако, все контролы на форме спокойно отобразят латышский текст, если присваивать его программно и с использованием той самой функции (ToLatvian).
Кстати, полагаю, речь идет о VBA все еще, а не о чистом VB?
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #13
       
Добавлено:  08.09.07 20:37
       
    
       
  
Жалко, что нет такой возможности. Ну да, про VBA речь идёт...
 
    
Так вот что. Я протестировал эту самую фунццию ToLatvian на разных XP-шных компьютерах в Excel 2003. Корректно она работает только на одном из них. Может таки дело в региональных настройках?
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа: GSerg
 GSerg


Вопросов: 0
Ответов: 1876 
      
 Профиль |  | #14
       
Добавлено:  08.09.07 22:03
       
    
       
  
el-paso, всё, что ты сказал в этом топике -- полная чушь.
 
    
Nytrogen, если надо хранить в исходнике на VB текст в кодировке, отличной от текущей системной, то делать это можно, только представив текст как строку вида ChrW(1234) & ChrW(2342) & ChrW(5421) & ...
Поскольку это неудобно, заведи скрытый лист, в ячейки которого помести все латышские сообщения. Потом бери их оттуда.
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа: Nytrogen
 Nytrogen


Вопросов: 18
Ответов: 186
      
 Профиль |  | #15
       
Добавлено:  09.09.07 21:21
       
    
       
  
Неудобно как раз таки брать латышские символы со скрытого листа... А так можно сразу писать в макросе. А вот за функцию ChrW спасибо.