powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FoxPro vs Exel
11 сообщений из 11, страница 1 из 1
FoxPro vs Exel
    #33598721
m.a.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите если кто знает, а не то скоро совсем свихнусь.
Проблемма стоит такая при выводе отчета в 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
FoxPro vs Exel
    #33598916
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33598928
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сходи на forum.foxclub.ru и почитай там про работу с экселем. Там обсуждалось несколько способов, свободных от недостатков примененного тобой способа.
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599041
m.a.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том что мне будет очень сложно перейти от такой "Буферной-технологии" хотелось бы узнать что оказывается в буфере обмена что за кодировка. На худой конец может можно перекодировать буфер.
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599063
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящийНу, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
Это проблема именно VFP - он не поддерживает UNICODE. И при обмене с приложением, которое работает с UNICODE (EXCEL) надо дать понять этому приложения в какой кодировке взять символ. Раскладка клавиатуры именно это и делает.
С уважением, Алексей.
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599066
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо булочной, не надо справочной (с)
Делайте через массив. Поиск по форуму по слову ArrayPasser
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599118
m.a.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное Огромное спасибо Crip.
Я думаю что это будет лучшим вариантом чем работать через буфер обмена.
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599301
m.a.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K проходящийНу, в общем-то, это проблемы и не фокса, и не экселя. Это так работают все NT-подобные винды...
Это проблема именно VFP - он не поддерживает UNICODE. И при обмене с приложением, которое работает с UNICODE (EXCEL) надо дать понять этому приложения в какой кодировке взять символ. Раскладка клавиатуры именно это и делает.
С уважением, Алексей.

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

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

У меня копирует-вставляет вроде все нормально (и винда и оффис - оба ХР)
Единственная проблема Офиса - если делать копирование в буфер ДО того, как открыт ворд или эксель, тогда независимо откуда копируешь - из фокса или даже блокнота - в ворд или эксель вставляется что-то несуразное.
Если же сначала открыть офисное приложение, а ПОТОМ уже скопировать в буфр откуда-то и вставить в документ этот текст - то все нормально.
...
Рейтинг: 0 / 0
FoxPro vs Exel
    #33599505
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
FoxPro vs Exel
    #33610746
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi S866!

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

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

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

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

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


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