Bonjour,

j'ai un petit problème avec les fonctionnalités d'export excels (OLE2) pour une application.

explication :

Mon application pouvant faire des exports excel était précédemment en oracle 6i. Pour l'export, c'est donc le client Excel sur le poste Local de chaque utilisateur qui était solicité.

Il a fallu monter de version pour le faire passer l'application en oracle10g et l'héberger sur un serveur (que nous appelerons X).
Après test + avoir une non-oracle exception au moment de l'export, j'ai cru comprendre que mes fonctions OLE2 cherchaient le client Excel sur mon serveur X. hors excel n'est pas installé sur X.

pouvez vous m'orienter sur la possibilité de spécifier l'appel de Excel sur le poste local ? j'avoue que je n'ai aucune formation forms, et que je n'ai pas vraiment de repères pour chercher les infos au bon endroit pour l'instant.

pour plus de détail, voiçi un exemple de 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
PROCEDURE H_LISTE_SANS_MEF(FORMAT IN VARCHAR) IS
 
-- ************************************************************************/
-- ** PROCEDURE - H_LISTE_SANS_MEF                                       */
-- ** Liste des fiches brut sans mise en forme                            */
-- ************************************************************************/
 
 	FichierDefaut VARCHAR2(256) := 'Liste_Sans_Mef';
 	NomFichier VARCHAR2(256);
 	FichierCSV TEXT_IO.FILE_TYPE;	
 
  /*Application OLE2.OBJ_TYPE;
  Workbooks OLE2.OBJ_TYPE;
  Workbook OLE2.OBJ_TYPE;
  Worksheets OLE2.OBJ_TYPE;
  Worksheet OLE2.OBJ_TYPE;
  Modules OLE2.OBJ_TYPE;
  Module OLE2.OBJ_TYPE;
  ArgList OLE2.LIST_TYPE;*/
 
  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;
  Modules CLIENT_OLE2.OBJ_TYPE;
  Module CLIENT_OLE2.OBJ_TYPE;
  ArgList CLIENT_OLE2.LIST_TYPE;    
 
BEGIN
 
	-- Si CSV enregistrement du fichier
	IF FORMAT IN ('RADIO_CSV','RADIO_EMAIL') THEN
 			NomFichier := GET_FILE_NAME(directory_name=>'',
 									file_name=>FichierDefaut,
                  dialog_type=> SAVE_FILE,
                  File_Filter=> 'Fichiers (c)omma (s)eparated (v)alue (*.csv)|*.csv|',
                  select_file => TRUE);
		  IF NomFichier IS NULL THEN
			  	RETURN;
		  END IF;
 			FichierCSV := TEXT_IO.FOPEN(NomFichier,'W');		  
	-- Si Excel création d'un classeur
	ELSIF FORMAT = 'RADIO_EXCEL' THEN
		  Application := CLIENT_OLE2.create_obj('Excel.Application');
		  OLE2.set_property(Application, 'Visible', True);	
		  Workbooks := CLIENT_OLE2.GET_OBJ_PROPERTY(Application, 'Workbooks');
		  Workbook := CLIENT_OLE2.invoke_obj(WorkBooks, 'Add');
		  Worksheets := CLIENT_OLE2.GET_OBJ_PROPERTY(Workbook, 'Worksheets');
		  Worksheet := CLIENT_OLE2.GET_OBJ_PROPERTY(Application,'activesheet');		 
	END IF;
 
	SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');
  H_LISTE_SANS_MEF_ENTETE(FORMAT, FichierCSV,Worksheet);
  H_LISTE_SANS_MEF_LIGNES(FORMAT, FichierCSV,Worksheet);
 
	IF FORMAT IN ('RADIO_CSV','RADIO_EMAIL') THEN
      TEXT_IO.FCLOSE(FichierCSV); 
		  Application := CLIENT_OLE2.create_obj('Excel.Application');
		  OLE2.set_property(Application, 'Visible', True);	
		  Workbooks := CLIENT_OLE2.GET_OBJ_PROPERTY(Application, 'Workbooks');
  	  ArgList := CLIENT_OLE2.CREATE_ARGLIST;
	    CLIENT_OLE2.ADD_ARG(ArgList, NomFichier);
	    Workbook := CLIENT_OLE2.INVOKE_OBJ(Workbooks, 'Open', ArgList);
	    CLIENT_OLE2.DESTROY_ARGLIST(ArgList);       
	END IF;
 
	-- exécution des macros
 	Modules := CLIENT_OLE2.GET_OBJ_PROPERTY(WorkBook, 'Modules');
 	Module := CLIENT_OLE2.invoke_obj(Modules, 'Add');
 
 	MACRO_EXCEL(Application, Module,:MAIN.TXT_EMPLACEMENT,'Decodage_Classification');
 
 	-- ecriture du fichier au format XLS
 	IF NOT NomFichier IS NULL THEN
		 MACRO_EXCEL(Application, Module,:MAIN.TXT_EMPLACEMENT,'SauvegardeXLS'); 	
 	END IF;
 
	IF FORMAT = 'RADIO_EMAIL' THEN
 			CLIENT_OLE2.invoke(Workbook, 'Close');
 			CLIENT_OLE2.invoke(Application, 'Quit');
 			ENVOI_NOTES_MAIL(:MAIN.TXT_SERVEUR,
 											 :MAIN.TXT_POUR,
 											 :MAIN.TXT_SUJET,
 											 :MAIN.TXT_TEXTE,
 											 NOMSANSEXTENSION(NomFichier)||'.xls');
	END IF;
 
  SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');	 			
 
  IF NOT Application IS NULL THEN
  		CLIENT_OLE2.release_obj(Application);
  END IF;		
  IF NOT Workbooks IS NULL THEN
		  CLIENT_OLE2.release_obj(Workbooks);
	END IF;		  
  IF NOT Workbook IS NULL THEN
  		CLIENT_OLE2.release_obj(Workbook);
	END IF;  		
  IF NOT Worksheets IS NULL THEN
  		CLIENT_OLE2.release_obj(Worksheets);
  END IF;  		
  IF NOT Worksheet IS NULL THEN
  		CLIENT_OLE2.release_obj(Worksheet);
  END IF;  		
  IF NOT Modules IS NULL THEN
		  CLIENT_OLE2.release_obj(Modules);
	END IF;		  
  IF NOT Module IS NULL THEN
  		CLIENT_OLE2.release_obj(Module);
  END IF;  		
 
 	exception when NO_DATA_FOUND
	THEN message('test error H_global (no data found) '||sqlerrm); 
	when OTHERS
	THEN message('test error H_global (others) '||sqlerrm);
 
END H_LISTE_SANS_MEF;


Merci d'avance,

Megayaya.