powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP
33 сообщений из 33, показаны все 2 страниц
Импорт данных из Excel в VFP
    #33324077
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем !

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

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


Помогите пожайлуста ...
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #33324103
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Импорт данных из Excel в VFP
    #33324182
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMPORT FROM <полный путь к файлу> TYPE XL8 SHEET "Лист1"
APPEND FROM <полный путь к файлу> type xl8

Пробывал на 8-ом и 9-ом VFP.
9-ом выдает:
Microsoft Excel file format is invalid
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #33324258
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Импорт данных из Excel в VFP
    #33324283
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробывал, результат тот же.
Пробывал маленьким файлом, работает.
У меня в Экселе более 25000 строк...
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #33324967
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели некому сказать ? ...
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #33325167
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Импорт данных из Excel в VFP
    #33326105
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, в предыдущем топике я написал:
И 57180 записей я получил.
Надо читать:
И 57173 записей я получил.
Просто из-за тестирования 7 записей осталось от предыдущего запуска. Сильно торопился, все даки пятница.
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #33326267
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Gabit!

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

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


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
Импорт данных из Excel в VFP
    #33328374
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо !!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Импорт данных из Excel в VFP
    #35980393
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При использование:
Код: 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
Период между сообщениями больше года.
Импорт данных из Excel в VFP
    #37629744
Silimonika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gabit, в фоксе IMPORT FROM ... TYPE XL8 Работет с таблицами Excel 5.0 а с более поздними версиями действительно вываливается с ошибкой. Если сохранить таблицу Excel в формате Excel 5.0 а затем ее импортнуть то все проходит на ура!
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #37630512
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Период между сообщениями больше года.
Импорт данных из Excel в VFP
    #39158529
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет)
помиогите пожалуйста разобратся. нужно перекунуть таблицу из эксел в 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
Импорт данных из Excel в VFP
    #39158554
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СА,

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

Код: vbnet
1.
c_a=nvl(c_a,'')
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158570
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Импорт данных из Excel в VFP
    #39158593
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Импорт данных из Excel в VFP
    #39158594
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

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


Не бывает такой ошибки на endscan
Телепатов тут нет, указывай точно строку где ошибка и дословно сообщение об ошибке
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158613
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Импорт данных из Excel в VFP
    #39158620
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица Ww2 открыта где-то еще монопольно.
попробуй сначала ее открыть, вставь в начало
Код: sql
1.
2.
3.
if !used('ww2')
   use ww2 in 0
endif
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158741
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело в том что 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
Импорт данных из Excel в VFP
    #39158751
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте кнопочку "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
Импорт данных из Excel в VFP
    #39158793
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТелепатов тут нет, указывай точно строку где ошибка и дословно сообщение об ошибке
Сколько можно повторять?

Хотя ВладимирМ больше телепат :)

Зачем там scan ? там do while надо и выход из цикла когда прочитали пустую строку из экселя.
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158822
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,
спасибо)но он всё равно выдаёт ошибку

select Nsi001
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) **** field p10 does not accept null values
то есть он почем то идёт дальше чем нужно...в таблице 42 строки когда он сканирует он идёт дальше не останавливается на 42..отсюда я думаю и ошибка...
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158845
Ffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выделить таблицу в Excel, сохранить как DBF. DBF открыть при помощи FoxPro.
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158847
badwolf_alina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо)извинете что туплю где то)))я же говорю новичок))поэтому со мной сложно)))
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158879
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badwolf_alinaВладимирМ,
спасибо)

Оно, конечно, "спасибо", но код все-таки выделяйте при помощи SRC Вы хоть сами-то можете "прочитать" собственный код в том виде как он отображается в форуме

badwolf_alina
но он всё равно выдаёт ошибку
(...)
то есть он почем то идёт дальше чем нужно...в таблице 42 строки когда он сканирует он идёт дальше не останавливается на 42..отсюда я думаю и ошибка...
Разумеется. У Вас вообще нет никакого признака остановки сканирования листа Excel. Если посмотреть, что именно Вы пытаетесь прочитать, то

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
loExcel = CreateObject("Excel.Application")
WITH loExcel
	.WorkBooks.Open('d:\lucru\zad4\excel.xls')
	.Sheets("sheet1").Select 
	i=2

	(...)

	(...) = loExcel.Cells(i,1).VALUE 
	i = i + 1

ENDWITH



В "переводе на человеческий" Вы в бесконечное число раз пытаетесь прочитать значение из 2 строчки листа Excel.

Если исходить из предположения, что первая же ячейка, в которой нет данных - это конец данных, то код следует переделать следующим образом

Код: 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.
* Начальное значение строки Excel - это строка предшествующая первой строке с данными
* поскольку цикл перебора строк Excel начнется с увеличения этого значения на 1
rowNum = 1

* Собственно цикл
loExcel = CreateObject("Excel.Application")
WITH loExcel
	.WorkBooks.Open('d:\lucru\zad4\excel.xls')
	.Sheets("sheet1").Select 

	* Следующая строка Excel
	rowNum 	= rowNum + 1

	Nsi001_p10 	= loExcel.Cells(rowNum, 1).VALUE 
	Nsi001_namer 	= loExcel.Cells(rowNum, 2).VALUE 
	Nsi001_JUD 	= loExcel.Cells(rowNum, 3).VALUE 
	Nsi001_NAMEJ 	= loExcel.Cells(rowNum, 4).VALUE 

	* Если очередное значение пустое (либо нет значения, либо значение 0) - прерываем цикл
	* Здесь предполагается, что переменная - это число. 
	* Для символьных условие будет такое: if empty(nvl(varStr, '')) = .T.

	if nvl(Nsi001_p10, 0) = 0  
		exit
	else
		* Если очередное значение НЕ пустое 
		* записываем данные и переходим к следующему шагу цикла (следующей строке)
		INSERT INTO Ww2 (p10, namer, JUD, NAMEJ) ;
			VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ)
	endif

ENDWITH




Если же значение может быть в том числе и нулевое, то, во-первых, можно, конечно, определить область с данными, но все подобные поиск содержат элемент неопределенности. Не факт, что Вы "угадаете" конец данных
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158890
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл сам цикл организовать :)

Код: 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.
loExcel = CreateObject("Excel.Application")
WITH loExcel
	.WorkBooks.Open('d:\lucru\zad4\excel.xls')
	.Sheets("sheet1").Select 
ENDWITH

* Начальное значение строки Excel - это строка предшествующая первой строке с данными
* поскольку цикл перебора строк Excel начнется с увеличения этого значения на 1
rowNum = 1

* Собственно цикл
do while .T.
	* Следующая строка Excel
	rowNum 	= rowNum + 1

	Nsi001_p10 	= loExcel.Cells(rowNum, 1).VALUE 
	Nsi001_namer 	= loExcel.Cells(rowNum, 2).VALUE 
	Nsi001_JUD 	= loExcel.Cells(rowNum, 3).VALUE 
	Nsi001_NAMEJ 	= loExcel.Cells(rowNum, 4).VALUE 

	* Если очередное значение пустое (либо нет значения, либо значение 0) - прерываем цикл
	* Здесь предполагается, что переменная - это число. 
	* Для символьных условие будет такое: if empty(nvl(varStr, '')) = .T.

	if nvl(Nsi001_p10, 0) = 0  
		exit
	else
		* Если очередное значение НЕ пустое 
		* записываем данные и переходим к следующему шагу цикла (следующей строке)
		INSERT INTO Ww2 (p10, namer, JUD, NAMEJ) ;
			VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ)
	endif
enddo




Если Вы точно знаете номер первой и последней строки с данными, то можно так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
m.n_start_row = 2
m.n_fin_row = 41

FOR rowNum = m.n_start_row TO m.n_fin_row
	Nsi001_p10 	= loExcel.Cells(rowNum, 1).VALUE 
	Nsi001_namer 	= loExcel.Cells(rowNum, 2).VALUE 
	Nsi001_JUD 	= loExcel.Cells(rowNum, 3).VALUE 
	Nsi001_NAMEJ 	= loExcel.Cells(rowNum, 4).VALUE 

	INSERT INTO Ww2 (p10, namer, JUD, NAMEJ) ;
		VALUES (Nsi001_p10, Nsi001_namer, Nsi001_JUD, Nsi001_NAMEJ)

ENDFOR
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158895
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

ЕМНИП в экселе нет NULL, по дефолту пустая строка, лучше так
Код: sql
1.
2.
3.
if empty(Nsi001_p10)
  exit
...  
...
Рейтинг: 0 / 0
Импорт данных из Excel в VFP
    #39158944
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕМНИП в экселе нет NULL, по дефолту пустая строка
Тогда как она получила сообщение об ошибке "field p10 does not accept null values"? Т.е. попыталась записать значение NULL, которое она могла получить только из Excel.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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