Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP / 25 сообщений из 33, страница 1 из 2
14.10.2005, 08:59
    #33324077
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Привет Всем !

У меня возник проблема импорта данных из файлов Excel версий страше 5.0/95
Он их не импортирует и выдает ошибку:
Fatal error: Exception code=C0000005 @ 14.10.2005 10:45:27.

Импортировал командами: Append from, Import from


Помогите пожайлуста ...
...
Рейтинг: 0 / 0
14.10.2005, 09:25
    #33324103
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
GabitУ меня возник проблема импорта данных из файлов Excel версий страше 5.0/95
Он их не импортирует и выдает ошибку:
Fatal error: Exception code=C0000005 @ 14.10.2005 10:45:27.

Импортировал командами: Append from, Import from

Напиши полностью твою команду Import from. И версию VFP.
...
Рейтинг: 0 / 0
14.10.2005, 10:02
    #33324182
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
IMPORT FROM <полный путь к файлу> TYPE XL8 SHEET "Лист1"
APPEND FROM <полный путь к файлу> type xl8

Пробывал на 8-ом и 9-ом VFP.
9-ом выдает:
Microsoft Excel file format is invalid
...
Рейтинг: 0 / 0
14.10.2005, 10:27
    #33324258
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
GabitIMPORT FROM <полный путь к файлу> TYPE XL8 SHEET "Лист1"
APPEND FROM <полный путь к файлу> type xl8

Пробывал на 8-ом и 9-ом VFP.
9-ом выдает:
Microsoft Excel file format is invalid
У меня четко сработало и 8-ом и 9-ом VFP. Предполагаю, что у тебя на "Лист1"-е имеются формулы или какие-то ссылки. Проверь это. Выдели в Excel-е весь лист сделай копирование->специальную вставку->значение. И повтори IMPORT.
...
Рейтинг: 0 / 0
14.10.2005, 10:33
    #33324283
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Попробывал, результат тот же.
Пробывал маленьким файлом, работает.
У меня в Экселе более 25000 строк...
...
Рейтинг: 0 / 0
14.10.2005, 13:20
    #33324967
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Неужели некому сказать ? ...
...
Рейтинг: 0 / 0
14.10.2005, 14:10
    #33325167
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
GabitНеужели некому сказать ? ...
Действительно, при большом количестве строк в Excel таблице, получаем ошибку в VFP (1661).
Пришлось написать программку, точнее форму для работы.
Но для этого пришлось создать структуру таблицы, у меня она следующая:
FieldNeme Type
a I
b C(12)
c C(250)
d C(250)
e C(100)
Конечно я взял структуру таблицы из Excel.
На форме имеется кнопка "Закачка" и в методе Cmd.Click написал следующее:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
#INCLUDE excel.h
LOCAL loExcel as Excel.Application, m.n_start_row as Integer, m.n_fin_row as Integer, i as Integer
m.n_start_row =  1 
m.n_fin_row =  57173 
m.n_step =  100 /(m.n_fin_row - m.n_start_row)
THISFORM.Ole_pb.Value =  0   && Это ProgressBar Control для отображения
                                   && процесса
LOCAL c_a, c_b, c_c, c_d, c_e

loExcel = CreateObject("Excel.Application")
WITH loExcel
  .WorkBooks.Open('c:\sv\vfp80\proba0\ww2.xls')
  .Sheets("Лист1").Select
  FOR i = m.n_start_row TO m.n_fin_row
    c_a = .Cells(i, 1 ).Value
    IF ISNULL(c_a)  && Приходится проверять, иногда бывает .NULL.
      c_a =  0 
    ENDIF
    c_b = .Cells(i, 2 ).Value
    IF ISNULL(c_b)
      c_b = ""
    ENDIF
    c_c = .Cells(i, 3 ).Value
    IF ISNULL(c_c)
      c_c = ""
    ENDIF
    c_d = .Cells(i, 4 ).Value
    IF ISNULL(c_d)
      c_d = ""
    ENDIF
    c_e = .Cells(i, 5 ).Value
    IF ISNULL(c_e)
      c_e = ""
    ENDIF
    INSERT INTO Ww2 ;
      (a, b, c, d, e);
      VALUES ;
      (c_a, c_b, c_c, c_d, c_e)
    THISFORM.Ole_pb.Value = THISFORM.Ole_pb.Value + m.n_step
  ENDFOR
  THISFORM.Ole_pb.Value =  100 
  .Range("A1").Select
ENDWITH
RELEASE loExcel
И 57180 записей я получил.
...
Рейтинг: 0 / 0
14.10.2005, 19:46
    #33326105
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Извиняюсь, в предыдущем топике я написал:
И 57180 записей я получил.
Надо читать:
И 57173 записей я получил.
Просто из-за тестирования 7 записей осталось от предыдущего запуска. Сильно торопился, все даки пятница.
...
Рейтинг: 0 / 0
15.10.2005, 01:06
    #33326267
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Hi Gabit!

IMHO проще видимо будет в самом Excel "подправить" (если надо) данные и
сохранить в формате dbase3. Там конечно тоже есть свои тараканы, но при
умелом "подправлении" всё решается просто и быстро... Конечно всё это можно
сделать и программно.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.10.2005, 07:40
    #33327169
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
В dbase3 надо будет сохранить вручную ?
Это не устраивает, потому что количество файлов несколько.
И это не разовая работа ...
...
Рейтинг: 0 / 0
17.10.2005, 15:19
    #33328358
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Пришлось сделать так как в примере Владимира (по идее).
Единственное изменил его немного, и получилось такой код:


SET COMPATIBLE ON

#DEFINE xlLastCell 11
DIMENSION laArray(1,50)

*Local loExcel
Wait window nowait "Запускается Excel ..."
&& Запуск Excel'а

oleApp = createobject("Excel.Application")
oleApp.DisplayAlerts=.F.
Wait window nowait "Открываем файл ..."
oleApp.Workbooks.Open("C:\файл.xls")

k1=6
X1=0
oleItem = oleApp.Workbooks.Item(1).Sheets.Item(1)
Wait window nowait "Определяем количество строк ..."
X =oleItem.Range("A1").SpecialCells(xlLastCell).Row
Wait window nowait " количество строк ... - "+STR(X-k1+1)
kk=k1
DO WHILE .T.
IF kk<X THEN
X1=kk+1100
IF X1>X THEN
X1=X
ENDIF
*DIMENSION laArray((X1-kk),Y)
_rng='"A'+ALLTRIM(STR(kk))+':AX'+ALLTRIM(STR(X1))+'"'
laArray =oleItem.Range(&_rng).Value
APPEND FROM ARRAY laArray
WAIT WINDOW NOWAIT 'Добавлено - '+STR(X1-k1+1)+' из '+STR(X-k1+1)
kk=X1+1
ELSE
EXIT
ENDIF
ENDDO

DIMENSION laArray(1)

oleApp.Quit
RELEASE oleApp
WAIT CLEAR
...
Рейтинг: 0 / 0
17.10.2005, 15:22
    #33328374
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Всем спасибо !!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.05.2009, 13:31
    #35980393
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
При использование:
Код: plaintext
1.
2.
laArray =oleItem.Range(&_rng).Value
APPEND FROM ARRAY laArray
Столькнулся проблемой в искажении данных.
В файле в определенной ячейке введено: 7771
Это графа имеет выравнивание по левому краю.
При импорте получаю значение: 7771.00
Пытался применить:
Код: plaintext
1.
2.
laArray =oleItem.Range(&_rng).Text
APPEND FROM ARRAY laArray

Ругается: 'laArray' - не является массивом

Как можно решить данную проблему ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.01.2012, 20:23
    #37629744
Silimonika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Gabit, в фоксе IMPORT FROM ... TYPE XL8 Работет с таблицами Excel 5.0 а с более поздними версиями действительно вываливается с ошибкой. Если сохранить таблицу Excel в формате Excel 5.0 а затем ее импортнуть то все проходит на ура!
...
Рейтинг: 0 / 0
25.01.2012, 12:48
    #37630512
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
GabitПри использование:
Код: sql
1.
2.
laArray =oleItem.Range(&_rng).Value
APPEND FROM ARRAY laArray


Столькнулся проблемой в искажении данных.
В файле в определенной ячейке введено: 7771
Это графа имеет выравнивание по левому краю.
При импорте получаю значение: 7771.00
Пытался применить:
Код: sql
1.
2.
laArray =oleItem.Range(&_rng).Text
APPEND FROM ARRAY laArray



Ругается: 'laArray' - не является массивом

Как можно решить данную проблему ?

1. Изменить формат ячейки

2 Залить в курсор фокса и затем конвертнуть как надо http://forum.foxclub.ru/read.php?29,478107,478121#msg-478121
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.01.2016, 14:43
    #39158529
badwolf_alina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
всем привет)
помиогите пожалуйста разобратся. нужно перекунуть таблицу из эксел в fox pro програмнно.далала на оборот всё прекрасно получилось...а тут застряла.я новичок и может где то что то не понимаю. сделала по примерам вот что получилос но выдают ошибку:
#INCLUDE excel.h
LOCAL loExcel as Excel.Application, m.n_start_row as Integer, m.n_fin_row as Integer, i as Integer
m.n_start_row = 1
m.n_fin_row = 41

LOCAL Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup

loExcel = CreateObject("Excel.Application")
WITH loExcel
.WorkBooks.Open('d:\lucru\zad4\excel.xls')
.Sheets("sheet1").Select
i=1
scan
Nsi001_p10 = loExcel.Cells(i,1).VALUE
Nsi001_namer = loExcel.Cells(i,2).VALUE
Nsi001_JUD = loExcel.Cells(i,3).VALUE
Nsi001_NAMEJ =loExcel.Cells(i,4).VALUE
Nsi001_DOSTUP =loExcel.Cells(i,5).VALUE
i=i+1
endscan
INSERT INTO Ww2 (p10, namer, JUD, NAMEJ, dostup) VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup)****ошибка (говорит файл иже используется) хотя я закрыла всё
ENDWITH
RELEASE loExce
помогите разобратся )
...
Рейтинг: 0 / 0
29.01.2016, 15:02
    #39158554
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Владимир СА,

автор IF ISNULL(c_a) && Приходится проверять, иногда бывает .NULL.
c_a = 0
ENDIF

Код: vbnet
1.
c_a=nvl(c_a,'')
...
Рейтинг: 0 / 0
29.01.2016, 15:15
    #39158570
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
badwolf_alinaendscan
INSERT INTO Ww2 (p10, namer, JUD, NAMEJ, dostup) VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup)****ошибка (говорит файл иже используется) хотя я закрыла всё
1. insert должен быть внутри scan, т.е. так
Код: sql
1.
2.
  INSERT INTO Ww2 (p10, namer, JUD, NAMEJ, dostup)  VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup)
endscan


Покажи дословно ошибку и еще надо видеть откуда появился Ww2. Где и как он открывается?

Еще потенциальная ошибка: типы данных. В ячейке экселя может быть любой тип, в переменной тоже, а поле таблицы конкретного типа, поэтому надо проверять тип.
...
Рейтинг: 0 / 0
29.01.2016, 15:26
    #39158593
badwolf_alina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Dima T,
ww2 это название dbf в которой по идеи он должен записать эти данные ....я кое что исправила но тут уже другая ошибка
#INCLUDE excel.h
LOCAL loExcel as Excel.Application


LOCAL Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup

loExcel = CreateObject("Excel.Application")
WITH loExcel
.WorkBooks.Open('d:\lucru\zad4\excel.xls')
.Sheets("sheet1").Select
i=2
scan

Nsi001_p10 = loExcel.Cells(i,1).VALUE
Nsi001_namer = loExcel.Cells(i,2).VALUE
Nsi001_JUD = loExcel.Cells(i,3).VALUE
Nsi001_NAMEJ =loExcel.Cells(i,4).VALUE
Nsi001_DOSTUP =loExcel.Cells(i,5).VALUE
i=i+1


INSERT INTO Ww2 (p10, namer, JUD, NAMEJ, dostup) VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup)
endscan**** file is in use
ENDWITH
RELEASE loExcel
...
Рейтинг: 0 / 0
29.01.2016, 15:28
    #39158594
badwolf_alina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Dima T,

извини ошибка та же)
...
Рейтинг: 0 / 0
29.01.2016, 15:30
    #39158599
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
badwolf_alina
Код: sql
1.
endscan**** file is in use


Не бывает такой ошибки на endscan
Телепатов тут нет, указывай точно строку где ошибка и дословно сообщение об ошибке
...
Рейтинг: 0 / 0
29.01.2016, 15:35
    #39158613
badwolf_alina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Dima T,




INSERT INTO Ww2 (p10, namer, JUD, NAMEJ, dostup) VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ, Nsi001_dostup) **** file in use
endscan
ENDWITH
RELEASE loExcel
...
Рейтинг: 0 / 0
29.01.2016, 15:39
    #39158620
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
таблица Ww2 открыта где-то еще монопольно.
попробуй сначала ее открыть, вставь в начало
Код: sql
1.
2.
3.
if !used('ww2')
   use ww2 in 0
endif
...
Рейтинг: 0 / 0
29.01.2016, 16:55
    #39158741
badwolf_alina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
дело в том что ww2 не была создана ,а открывала я по ошибки другую таблицу(промах извините)....так как поняла это я создала ww2 с пустыми столбцами...вроде бы всё хорошо но опять ошбку выдаёт...когда прогоняю по шагово прогу в visual fox pro - debbuger он при выполнений пропускает скан...ещё раз кидаю код ибо может я уже не вижу ошибку или что то не поставила:
#INCLUDE excel.h
LOCAL loExcel as Excel.Application, m.n_start_row as Integer, m.n_fin_row as Integer, i as Integer
m.n_start_row = 1
m.n_fin_row = 41
LOCAL Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ
loExcel = CreateObject("Excel.Application")
WITH loExcel
.WorkBooks.Open('d:\lucru\zad4\excel.xls')
.Sheets("sheet1").Select
i=2
SCAN
Nsi001_p10=loExcel.Cells(i,1).VALUE
Nsi001_namer=loExcel.Cells(i,2).VALUE
Nsi001_JUD=loExcel.Cells(i,3).VALUE
Nsi001_NAMEJ=loExcel.Cells(i,4).VALUE
i=i+1
INSERT INTO Ww2 (p10, namer, JUD, NAMEJ) VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ)
endscan
ENDWITH
RELEASE loExcel
...
Рейтинг: 0 / 0
29.01.2016, 17:03
    #39158751
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт данных из Excel в VFP
Используйте кнопочку "SRC" при оформлении кода

Код: sql
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.
#INCLUDE excel.h
LOCAL 	loExcel as Excel.Application, ;
	m.n_start_row as Integer, ;
	m.n_fin_row as Integer, ;
	i as Integer

m.n_start_row = 1
m.n_fin_row = 41

LOCAL 	Nsi001_p10, ;
	Nsi001_namer, ;
	Nsi001_JUD, ;
	Nsi001_NAMEJ

loExcel = CreateObject("Excel.Application")
WITH loExcel
	.WorkBooks.Open('d:\lucru\zad4\excel.xls')
	.Sheets("sheet1").Select 
	i=2

	************
	**** По какой таблице выполняется перебор записей SCAN ?
	************

	SCAN
		Nsi001_p10=loExcel.Cells(i,1).VALUE 
		Nsi001_namer=loExcel.Cells(i,2).VALUE 
		Nsi001_JUD=loExcel.Cells(i,3).VALUE 
		Nsi001_NAMEJ=loExcel.Cells(i,4).VALUE 
		i=i+1
		INSERT INTO Ww2 (p10, namer, JUD, NAMEJ) 
			VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ)
	endscan
ENDWITH
RELEASE loExcel 
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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