Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro vs Exel / 11 сообщений из 11, страница 1 из 1
14.03.2006, 11:04
    #33598721
m.a.v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Помогите если кто знает, а не то скоро совсем свихнусь.
Проблемма стоит такая при выводе отчета в Exel или Word при вставке из
буфера русский язык превращается в непонятно что.
Да и вообще если скопировать из окна Foxa и вставить в другое приложение
тоже выводит русский не так.

Еще одна особенность если при копированнии в буфер стоит русская расскладка то все работает отлично.
Как можно решить данную проблемму не прибегая к API(смене расскладки)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
CREATE CURSOR T (nSumm N( 10 ),cNaim C( 20 ))
INSERT INTO T (nSumm, cNaim) VALUES ( 34 ,"РУССКИЙ-ENGLISH")
INSERT INTO T (nSumm, cNaim) VALUES ( 12345 ,"ENGLISH-РУССКИЙ")
GO TOP

LOCAL loExel , LoError
 
 LoError = ON("Error")
 ON ERROR loExel= .NULL.
 loExel= GETOBJECT( ,"EXCEL.application")
 ON ERROR &LoError
	if ISNULL(loExel) 
		loExel= CreateObject("EXCEL.application") 
	ENDIF
	 
WITH LoExel   
.Visible  = .T. 
.Workbooks.Add()

nRec = RECCOUNT("T")
_Vfp.DataToClip("T",nRec, 3 ) && Заносит данные курсора в буфер 
*Модификация буфера для корректной вставки в ячейки
ClipB = _CLIPTEXT            		  && заносит данные буфера в переменную
R = "	" + Chr( 13 )          		  && ТАВ + ENTER
N = AT(R,ClipB)                		  && Ищет первое вхождение ТАВ + ENTER
ClipB = SUBSTR(ClipB,N+ 2 )     		  && Удаляет строку с полями (возвращает строку после первого ТАВ + ENTER)
ClipB = STRTRAN(ClipB,'  ','')		  && заменяет два пробела на пустую строку
ClipB = STRTRAN(ClipB,R,' ' + Chr( 13 )) && заменяет ТАВ + ENTER на Пробел + ENTER 
_ClipText = ClipB && заносит данные в буфер 

.Range("A1").Select
.ActiveSheet.Paste 

.Range("B4").Select  
 .ActiveCell.FormulaR1C1 = "РУССКИЙ-ENGLISH" 
ENDWITH  

Заранее спасибо
...
Рейтинг: 0 / 0
14.03.2006, 11:44
    #33598916
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Ну, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
...
Рейтинг: 0 / 0
14.03.2006, 11:47
    #33598928
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Сходи на forum.foxclub.ru и почитай там про работу с экселем. Там обсуждалось несколько способов, свободных от недостатков примененного тобой способа.
...
Рейтинг: 0 / 0
14.03.2006, 12:24
    #33599041
m.a.v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Дело в том что мне будет очень сложно перейти от такой "Буферной-технологии" хотелось бы узнать что оказывается в буфере обмена что за кодировка. На худой конец может можно перекодировать буфер.
...
Рейтинг: 0 / 0
14.03.2006, 12:31
    #33599063
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
проходящийНу, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
Это проблема именно VFP - он не поддерживает UNICODE. И при обмене с приложением, которое работает с UNICODE (EXCEL) надо дать понять этому приложения в какой кодировке взять символ. Раскладка клавиатуры именно это и делает.
С уважением, Алексей.
...
Рейтинг: 0 / 0
14.03.2006, 12:32
    #33599066
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Не надо булочной, не надо справочной (с)
Делайте через массив. Поиск по форуму по слову ArrayPasser
...
Рейтинг: 0 / 0
14.03.2006, 12:45
    #33599118
m.a.v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Огромное Огромное спасибо Crip.
Я думаю что это будет лучшим вариантом чем работать через буфер обмена.
...
Рейтинг: 0 / 0
14.03.2006, 13:31
    #33599301
m.a.v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Aleksey-K проходящийНу, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
Это проблема именно VFP - он не поддерживает UNICODE. И при обмене с приложением, которое работает с UNICODE (EXCEL) надо дать понять этому приложения в какой кодировке взять символ. Раскладка клавиатуры именно это и делает.
С уважением, Алексей.

Сейчас абсолютно случайно наткнулся на такую вешщь как специальная вставка она есть в контекстном меню там можно выбрать, как вставлять текст UNICODE или просто текстом, если же выбрать UNICODE, то не работает, а текст вставляется отлично.

Fox source
Код: plaintext
.ActiveSheet.PasteSpecial("Текст",.F.)
...
Рейтинг: 0 / 0
14.03.2006, 14:11
    #33599464
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
m.a.v
Да и вообще если скопировать из окна Foxa и вставить в другое приложение
тоже выводит русский не так.

У меня копирует-вставляет вроде все нормально (и винда и оффис - оба ХР)
Единственная проблема Офиса - если делать копирование в буфер ДО того, как открыт ворд или эксель, тогда независимо откуда копируешь - из фокса или даже блокнота - в ворд или эксель вставляется что-то несуразное.
Если же сначала открыть офисное приложение, а ПОТОМ уже скопировать в буфр откуда-то и вставить в документ этот текст - то все нормально.
...
Рейтинг: 0 / 0
14.03.2006, 14:18
    #33599505
S866
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
SRC]_cliptext=''
i=3
WAIT WINDOW "Формирую буфер обмена" nowait

do while not eof()
_cliptext=_cliptext+spis601tek.tekpr+CHR(9)+ALLTRIM(spis601tek.orgname)+CHR(9)+spis601tek.orginn+CHR(9)+;
TRANSFORM(spis601tek.sd1)+CHR(9)+TRANSFORM(spis601tek.debet)+CHR(9)+TRANSFORM(spis601tek.kredit)+CHR(9)+TRANSFORM(spis601tek.sd2)+CHR(13)
SELECT spis601tek
skip
ENDDO

WAIT WINDOW "Произвожу вставку из буфера обмена" nowait
m.losheet.cells(i,1).pastespecial(1)[/src]
еще не разу подвела кодировка.
В таблица в 1251 кодировке (vfp5). Приложение обработки VFP9
идея почерпнута мною из http://]/topic/160778&hl= Подсказал ВладимирМ

Вобщем мне кажется что в винде кодировка по умолчанию 1251 - соответственно и данные в буфер необходимо посылать в этой кодировке
...
Рейтинг: 0 / 0
20.03.2006, 00:32
    #33610746
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FoxPro vs Exel
Hi S866!

> Вобщем мне кажется что в винде кодировка по умолчанию 1251 -
> соответственно и данные в буфер необходимо посылать в этой кодировке

Нет. Для не-UNICODE приложений в Clipboard (через _CLIPTEXT или при работе
"штатных" Ctrl+C или меню) посылаются данные с указанием той CP, какая
раскладка клавиатуры сейчас активна - потому для английской раскладки и
получается ерунда. Это кстати описано в MSDN.

Без АПИ избавиться от этого IMHO нереально - но вместо принудительной смены
раскладки можно пойти "с другой стороны" - заменить "стандартные" методы
работы с буфером на прямые АПИ вызовы - при этом конечно можно "руками"
загнать в буфер UNICODE-текст и не иметь проблем при вставке.

P.S. Кривые методы типа правки таблиц соответствия NLS в реестре конечно ко
вниманию не принимаются :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro vs Exel / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]