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

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

Переписывай под Access! Только не плачь
...
Рейтинг: 0 / 0
16.09.2004, 10:27
    #32697004
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Есть dbf-таблица, в нее будут забиваться данные. Я открываю ее в гриде. В эту таблицу должны заноситься данные. Некоторые позиции вносятся вручную. А некоторые должны просто копироваться из excel и вставляться в эту таблицу. Копироваться для того, чтобы облегчить работу по забиванию таблицы, многие данные уже предоставлены на совершенно разных документах excel. То есть для каждого excel-документа в отдельности нет возможности конвертировать данные в dbf, потому что документы совершенно разного формата, нужно копировать только какую-то часть этого документа, которая должна выбираться непосредственно пользователем, представления о том, что он будет копировать в grid нет (но это однозначно ячейка(ячейки) excel). Как оформить это копирование в мою таблицу. И есть ли возможность максимально упростить эту операцию (По типу скопировал ячейки в excel, выбрал поле в gride, нажал вставить, и данные из excel автоматически вставляются в тем же блоком в мою таблицу)
...
Рейтинг: 0 / 0
16.09.2004, 10:29
    #32697008
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Да..., пустить под access месяц работы в fox pro...
Может, все таки есть варианты?
...
Рейтинг: 0 / 0
16.09.2004, 10:30
    #32697015
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Да..., пустить под access месяц работы в fox pro...
Может, все таки есть варианты?
...
Рейтинг: 0 / 0
16.09.2004, 10:42
    #32697048
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
не лучший вариант но просто ничего в голову не идет
создаете excel объект в фоксе открываете все нужные таблицы
на форме ставите кнопку копия из ексель
при нажатии на кнопку копируеться значение из активной ексель таблицы и активного поля в фокс а затем обрабатываеться
...
Рейтинг: 0 / 0
16.09.2004, 10:49
    #32697075
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Как раз сейчас этим и занимаюсь. Только как скопировать данные допустим выделенных 9 ячеек excel (3 на 3) в соответствующие 9 полей (те же 3 на 3) грида?
...
Рейтинг: 0 / 0
16.09.2004, 10:54
    #32697085
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
ну Вам же сказали никак
копируйте по одной
или можно обрабатывать выбранный диапазон правда таблицы разные и я так понял что общего правила нет
а по какому принципу фокс должен сообразить как ему разбить строку буфера и что куда вставлять
...
Рейтинг: 0 / 0
16.09.2004, 11:10
    #32697142
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Все, уже сижу с 1000страничной книжищей access для профессионалов. Обломалась моя работа, придется все переделывать.
...
Рейтинг: 0 / 0
16.09.2004, 11:18
    #32697173
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Можно предложить такой вариант - получаем в массив выделенный в текущей Экселевской книге диапазон:
Код: 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
16.09.2004, 11:49
    #32697275
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Немного исправленный вариант с определением размерности выделенной области:
Код: 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
16.09.2004, 12:30
    #32697434
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Понятно, а как теперь определенным полям foxproшной таблицы задать значения этого массива?
...
Рейтинг: 0 / 0
16.09.2004, 12:40
    #32697462
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
как угодно
scatter например
...
Рейтинг: 0 / 0
16.09.2004, 12:43
    #32697475
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Что-то типа:
Код: 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
16.09.2004, 12:44
    #32697484
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Пожалуста, у меня пожар. Язык знаю не очень хорошо, времени разбираться просто нет. Как из этого массива данные добавить в таблицу?
...
Рейтинг: 0 / 0
16.09.2004, 12:59
    #32697544
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Почуму так мрачно?...

Я делал вставку данных из таблиц 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
16.09.2004, 14:13
    #32697806
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Собрав всё вместе получим такую процедурку на клик кнопки или иное событие по которому происходит перенос данных:
Код: 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
16.09.2004, 14:42
    #32697913
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
В принципе после создания массива из 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
16.09.2004, 14:53
    #32697949
T0lik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
Простите, немного непонял - Append from - добавляет новые строки, я думал вам в уже добавленных надо данные подставлять.
А если добавляются новые строки, то зачем выделять несколько ячеек?
Всё равно в конец таблицы всё добавится независимо от выделения.
...
Рейтинг: 0 / 0
16.09.2004, 15:01
    #32697974
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
если нужно добавлять то используте
append blank a не skip
...
Рейтинг: 0 / 0
16.09.2004, 15:08
    #32698002
xamlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
У меня есть порядка 20 полей в таблице. Данные вставляются блоком (из созданного массива) Как добиться того, что бы блок данных вставлялся начиная с выделенного места таблицы (например сейчас выделена 3 строка поля field3. В массиве содержится 2 на 2 excelевские ячейки , мне нужно, чтобы они вставились в 3 и 4 строку полей field3 и field4) Append пришлось использовать, потому что с replace пока не получается. Вот такая ситуация. Это последнее, что мне осталось написать, что бы выполнить все требования, можно ли такого добиться? Извиняюсь, за кривую постановку вопроса, опыт написания на foxe очень маленький.
...
Рейтинг: 0 / 0
16.09.2004, 15:17
    #32698035
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
APPEND FROM ARRAY ArrayName
[FOR lExpression]
[FIELDS FieldList]
...
Рейтинг: 0 / 0
16.09.2004, 15:18
    #32698038
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
GATHER FROM ArrayName | MEMVAR | NAME ObjectName
[FIELDS FieldList | FIELDS LIKE Skeleton | FIELDS EXCEPT Skeleton]
[MEMO]
...
Рейтинг: 0 / 0
16.09.2004, 15:19
    #32698047
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование через буфер в excel
INSERT [BEFORE] [BLANK]
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копирование через буфер в excel / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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