powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копирование через буфер в excel
25 сообщений из 28, страница 1 из 2
Копирование через буфер в excel
    #32696905
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая. Есть таблица, в которую заносятся записи в несколько полей. Возможно ли вставить в открытую foxoвскую таблицу скопированные (ctrl+c) ячейки из excel-документа? Или есть какие-то другие варианты? Если можно, то как этого добиться. Если я не смогу сделать этого до сегодняшних 2 дня, то вся моя работа пойдет на смарку, придется переписывать прогу под Access. Жаль будет... :( Народ, помогите, пожалуйста.
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32696971
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем конкретно вы занимаетесь
что хотите сделать
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32696975
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одну ячейку можно вставить. А механизма групповой вставки сразу в несколько строк или полей из буфера обмена в FoxPro не предусмотрено.

Ну, разве что, программный разбор содержимого буфера обмена (содердимое переменной _ClipText)

Переписывай под Access! Только не плачь
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697004
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть dbf-таблица, в нее будут забиваться данные. Я открываю ее в гриде. В эту таблицу должны заноситься данные. Некоторые позиции вносятся вручную. А некоторые должны просто копироваться из excel и вставляться в эту таблицу. Копироваться для того, чтобы облегчить работу по забиванию таблицы, многие данные уже предоставлены на совершенно разных документах excel. То есть для каждого excel-документа в отдельности нет возможности конвертировать данные в dbf, потому что документы совершенно разного формата, нужно копировать только какую-то часть этого документа, которая должна выбираться непосредственно пользователем, представления о том, что он будет копировать в grid нет (но это однозначно ячейка(ячейки) excel). Как оформить это копирование в мою таблицу. И есть ли возможность максимально упростить эту операцию (По типу скопировал ячейки в excel, выбрал поле в gride, нажал вставить, и данные из excel автоматически вставляются в тем же блоком в мою таблицу)
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697008
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да..., пустить под access месяц работы в fox pro...
Может, все таки есть варианты?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697015
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да..., пустить под access месяц работы в fox pro...
Может, все таки есть варианты?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697048
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не лучший вариант но просто ничего в голову не идет
создаете excel объект в фоксе открываете все нужные таблицы
на форме ставите кнопку копия из ексель
при нажатии на кнопку копируеться значение из активной ексель таблицы и активного поля в фокс а затем обрабатываеться
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697075
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз сейчас этим и занимаюсь. Только как скопировать данные допустим выделенных 9 ячеек excel (3 на 3) в соответствующие 9 полей (те же 3 на 3) грида?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697085
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну Вам же сказали никак
копируйте по одной
или можно обрабатывать выбранный диапазон правда таблицы разные и я так понял что общего правила нет
а по какому принципу фокс должен сообразить как ему разбить строку буфера и что куда вставлять
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697142
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, уже сижу с 1000страничной книжищей access для профессионалов. Обломалась моя работа, придется все переделывать.
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697173
T0lik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно предложить такой вариант - получаем в массив выделенный в текущей Экселевской книге диапазон:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Local loExcel
DIMENSION laArray( 10 , 10 )
lcOldError=On("ERROR")
on error loExcel=.NULL.
loExcel=GetObject(,"Excel.Application")
on error &lcOldError
if isnull(loExcel)
	= MESSAGEBOX('Excel закрыт')
ELSE
	WITH loExcel
		laArray = .Selection.Value
	ENDWITH
ENDIF
Ну а дальше этот массив можно пихнуть и в таблицу :)
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697275
T0lik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного исправленный вариант с определением размерности выделенной области:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
lcOldError=On("ERROR")
on error loExcel=.NULL.
loExcel=GetObject(,"Excel.Application")
on error &lcOldError
if isnull(loExcel)
	= MESSAGEBOX('Excel закрыт')
ELSE
	WITH loExcel
		X = .Selection.Columns.Count
		Y = .Selection.Rows.Count
		DIMENSION laArray(X,Y)
		laArray = .Selection.Value
	ENDWITH
ENDIF
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697434
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно, а как теперь определенным полям foxproшной таблицы задать значения этого массива?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697462
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как угодно
scatter например
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697475
T0lik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то типа:
Код: plaintext
1.
2.
3.
4.
FOR lnCount =  1  TO X
REPLACE table.field1 WITH laArray(lnCount, 1 ),;
	     table.field2 WITH laArray(lnCount, 2 )
SKIP
ENDFOR
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697484
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуста, у меня пожар. Язык знаю не очень хорошо, времени разбираться просто нет. Как из этого массива данные добавить в таблицу?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697544
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почуму так мрачно?...

Я делал вставку данных из таблиц Word.
делал я так:
GETOBJECT(,"Word.Application") или CreateObject(...)
oDoc=createobject(,"Word.Document)
в тот документ вставляем из буфера oDoc.Selection.Paste

rCount=oDoc.tables.item(1).Rows.count
cCount=oDoc.tables.item(1).Columns.count
for i=1 to rCount
for j=1 to cCount
r[j]=SUBSTR(oDoc.tables.item(1).cell(i,j).range.text,1,LEN(oDoc.tables.item(1).cell(i,j).range.text)-2)
....

Ну а для Excel тоже иожно єто сделать...
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697806
T0lik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собрав всё вместе получим такую процедурку на клик кнопки или иное событие по которому происходит перенос данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
lcOldError=On("ERROR")
on error loExcel=.NULL.
loExcel=GetObject(,"Excel.Application")
on error &lcOldError
if isnull(loExcel)
	= MESSAGEBOX('Excel закрыт')
ELSE
	WITH loExcel
		X = .Selection.Columns.Count
		Y = .Selection.Rows.Count
		DIMENSION laArray(X,Y)
		laArray = .Selection.Value
	ENDWITH
ENDIF

SELECT Table &&Источник для грида
FOR lnCount =  1  TO X
REPLACE Table.field1 WITH laArray(lnCount, 1 ),;
	     Table.field2 WITH laArray(lnCount, 2 ),;
              ......
	     Table.fieldY WITH laArray(lnCount,Y)
SKIP
ENDFOR
Есть ограничения:
1) Пользователь должен так выбирать диапазон, чтобы колонок было именно Y и они соответствовали полям баз. Можно конечно определить в какой колонке грида стоит пользователь, но могут возникнуть сложности с типом данных- смотри пункт ниже.
2)Из экселя все данные получаются строкового типа, поэтому в Replace надо для этих полей выполнить преобразование (заменить laArray(x,y) допустим VAL(laArray(x,y)))
3) Диапазон, выделенный в Экселе при переносе не должен достигнуть конца таблицы.
Все эти проблемы можно решить. Но вам виднее что легче в данной ситуации - решать их или поставить пользователя в рамки.
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697913
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе после создания массива из excel я дописывал
APPEND FROM ARRAY laArray FIELDS field1, field2, field3, ...
И нужные поля заполнялись.
А на вариант
FOR lnCount = 1 TO y
REPLACE zakupka.field1 WITH laArray(lnCount,1)
REPLACE zakupka.field2 WITH laArray(lnCount,2)
......
REPLACE zakupka.fieldy WITH laArray(lnCount,y)
SKIP
ENDFOR
ругается, выдает несколько раз ошибку несовпадение типа данных
А как можно выделить несколько ячеек грида?
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697949
T0lik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, немного непонял - Append from - добавляет новые строки, я думал вам в уже добавленных надо данные подставлять.
А если добавляются новые строки, то зачем выделять несколько ячеек?
Всё равно в конец таблицы всё добавится независимо от выделения.
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32697974
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нужно добавлять то используте
append blank a не skip
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32698002
xamlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть порядка 20 полей в таблице. Данные вставляются блоком (из созданного массива) Как добиться того, что бы блок данных вставлялся начиная с выделенного места таблицы (например сейчас выделена 3 строка поля field3. В массиве содержится 2 на 2 excelевские ячейки , мне нужно, чтобы они вставились в 3 и 4 строку полей field3 и field4) Append пришлось использовать, потому что с replace пока не получается. Вот такая ситуация. Это последнее, что мне осталось написать, что бы выполнить все требования, можно ли такого добиться? Извиняюсь, за кривую постановку вопроса, опыт написания на foxe очень маленький.
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32698035
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APPEND FROM ARRAY ArrayName
[FOR lExpression]
[FIELDS FieldList]
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32698038
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GATHER FROM ArrayName | MEMVAR | NAME ObjectName
[FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
[MEMO]
...
Рейтинг: 0 / 0
Копирование через буфер в excel
    #32698047
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT [BEFORE] [BLANK]
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копирование через буфер в excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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