Bonjour à tous,
J'ai un petit problème avec importation données excel avec webutil, il marche très bien mais il faut toujours modifier le ficher excel en question par exemple
- il faut enlever les en-têtes
- il ne détecte pas les lignes vides, il continue toujours l'insertion, donc à partir du script il faut saisir le mot 'FIN' à la dernière ligne dans l'excel
voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
 
DECLARE 
	application   Client_OLE2.Obj_Type; 
	workbooks     Client_OLE2.Obj_Type; 
	workbook      Client_OLE2.Obj_Type; 
	worksheets    Client_OLE2.Obj_Type; 
	worksheet     Client_OLE2.Obj_Type;
	worksheet2    Client_OLE2.Obj_Type;	
	cell 					Client_OLE2.OBJ_TYPE;
	args 					Client_OLE2.OBJ_TYPE;
	cell_value 		varchar2(100);
	num_wrkshts		NUMBER;
	wksht_name		VARCHAR2(250);
	fin 					boolean:=false;
	j  						integer:=1; 
	v_fName 			VARCHAR2(250);
BEGIN 
DELETE FROM TITRE_EXCEL ;
	-- Get the name of the file to open
	--v_fName := 'D:\MyDevelopment\Forms\Samples\WebUtil\Read_Excel\planets3.xls';
	v_fName := WebUtil_File.File_Open_Dialog(
							directory_name => 'C:\EXCEL'
							--,file_name => Get_Form_Property(:System.Current_form,Form_Name)||'.xls'
							,File_Filter => null
							,Title => 'Select Client filename to Open.'
					);
 
	IF ( v_fName IS NOT NULL ) THEN 
 
		-- The following sets up communication with the excel spreadsheet
		-- --------------------------------------------------------------
		-- Open the OLE application
		application := Client_OLE2.create_obj('Excel.Application'); 
		-- Keep the application hidden
		Client_OLE2.set_property(application,'Visible','false');
 
		workbooks := Client_OLE2.Get_Obj_Property(application, 'Workbooks');
		args := Client_OLE2.CREATE_ARGLIST;
 
		-- Open the selected File
		-- ----------------------
		Client_OLE2.add_arg(args,v_fName); 
		workbook := Client_OLE2.GET_OBJ_PROPERTY(workbooks,'Open',args);
		Client_OLE2.destroy_arglist(args);
 
		worksheets := Client_OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets');
 
		-- Get number of worksheets
		-- ------------------------
		num_wrkshts := Client_OLE2.GET_NUM_PROPERTY(worksheets, 'Count');
		worksheet := Client_OLE2.GET_OBJ_PROPERTY(application,'activesheet');
 
		--Go to the first record
		go_block('ttr_excel'); 
		first_record; 
 
		loop
 
				If :system.record_status <> 'NEW' then	
		         create_record;
		  	end if;
 
		exit when fin ;
 
			for k in 1..7 loop  --7 fields per record
				args:= Client_OLE2.create_arglist;
				Client_OLE2.add_arg(args, j);
				Client_OLE2.add_arg(args, k);
				cell:= Client_OLE2.get_obj_property(worksheet, 'Cells', args);
				Client_OLE2.destroy_arglist(args);
				cell_value :=Client_OLE2.get_char_property(cell, 'Value');
 
			if upper(cell_value) = 'FIN' then
 
				fin:=true;
					Message('End of Data');
					exit;
			end if;
 
		--Could be done this way also -> 
 
		/*if k =1 then
			:dept.deptno:=cell_value;
		end if;
 
		if k =2 then
			:dept.dname:=cell_value;
		end if;
 
		if k =3 then
			:dept.loc:=cell_value;
		end if;	
		*/
 
				--Less code this way ->
				copy(cell_value,name_in('system.cursor_item'));
				next_item;
 
			end loop; --for
 
			j:=j+1;
		end loop;--main loop
 
		-- Release the Client_OLE2 object handles
		IF (cell IS NOT NULL) THEN 
			Client_OLE2.release_obj(cell);
		END IF;
		IF (worksheet IS NOT NULL) THEN 
			Client_OLE2.release_obj(worksheet);
		END IF;
		IF (worksheets IS NOT NULL) THEN 
			Client_OLE2.release_obj(worksheets);
		END IF;
		IF (worksheet2 IS NOT NULL) THEN 
			Client_OLE2.release_obj(worksheet2);
		END IF;
		IF (workbook IS NOT NULL) THEN 
			Client_OLE2.release_obj(workbook);
		END IF;
		IF (workbooks IS NOT NULL) THEN 
			Client_OLE2.release_obj(workbooks);
		END IF;
		Client_OLE2.invoke(application,'Quit');
		Client_OLE2.release_obj(application);
	ELSE
		Message('No File selected.');
		message(' ');
		RAISE Form_Trigger_Failure;
	END IF;
commit_form;
		END;
Donc comment eviter la suppression du prèmiere ligne (en-tête)
Comment faire pour qu'il detecte la derniere ligne vide et stop (sans mettre le mot FIN)
Merci