powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP
8 сообщений из 33, страница 2 из 2
Импорт данных из 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
8 сообщений из 33, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт данных из Excel в VFP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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