Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Un client a installé Excel Viewer sur son serveur.
Une fonctionnalité de notre application importe des données via Excel.
J'utilise le code suivant :
ConnectToNewObject("excel.application")
Or çà ne semble pas fonctionner pour Viewer. Excepté le fait de suggérer d'installer Excel, voyez vous d'autres solutions ?
Merci d'avance,
Sébastien
Hors ligne
Bonjour, c'est possible en utilisant ADO.
Hors ligne
Salut,
Ne serait pas possible d'utiliser l'API Windows ShellExecuteA qui lance la bonne application en fonction de l'application associé à l'extension du fichier ?
Cdt
Yanis
Hors ligne
Bonjour,
L'idée semble intéressante !
Dans tous les cas il faudra faire évoluer ma fonction d'import.
Yanis a écrit:
Salut,
Ne serait pas possible d'utiliser l'API Windows ShellExecuteA qui lance la bonne application en fonction de l'application associé à l'extension du fichier ?
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
Ne serait pas possible d'utiliser l'API Windows ShellExecuteA qui lance la bonne application en fonction de l'application associé à l'extension du fichier ?
Cdt
Yanis
Si j'ai bien compris:
il ouvre un fichier Excel par OLE et il lit les données à l'intérieur du fichier Excel pour récupérer ces données dans PB.
Le ShellExecute va seulement lui permettre d'ouvrir le fichier mais pas de la lire.
En ce qui concerne le fichier Excel lui même.
Quel est son "format" ?
Du gros tableau avec des formules et tout ?
Ou juste une "liste de colonne" que l'on pourrait éventuellement sauver au format CSV pour en faire un import direct dans une Datawindow avec un ImportFile ?
Hors ligne
C'est assez simple en soi. Il s'agit d'une simple tableau de valeurs dans un seul onglet.
Les autres clients ayant Excel sur leur serveur, le problème ne se pose pas.
L'option d'un importfile au format CSV est intéressante.
Si le client impose Viewer, je pense que je choisirai cette option.
Merci à vous pour ces réponses rapides.
_francois_ a écrit:
Yanis a écrit:
Salut,
Ne serait pas possible d'utiliser l'API Windows ShellExecuteA qui lance la bonne application en fonction de l'application associé à l'extension du fichier ?
Cdt
YanisSi j'ai bien compris:
il ouvre un fichier Excel par OLE et il lit les données à l'intérieur du fichier Excel pour récupérer ces données dans PB.
Le ShellExecute va seulement lui permettre d'ouvrir le fichier mais pas de la lire.
En ce qui concerne le fichier Excel lui même.
Quel est son "format" ?
Du gros tableau avec des formules et tout ?
Ou juste une "liste de colonne" que l'on pourrait éventuellement sauver au format CSV pour en faire un import direct dans une Datawindow avec un ImportFile ?
Hors ligne
Je viens de voir que l'EXCEL Viewer supporte aussi l'OLE:
http://www.theiet.org/help/software/excelviewer.cfm
Il faut donc trouver la bonne class ole (ex: xyz) dans le browser PB et mettre son nom dans le connectNewObject.
ConnectToNewObject("xyz.application")
Si cette solution est possible, le code existant ne devrait pas changer.
Hors ligne
D'après la doc powerbuilder, on est pas obligé de mettre le nom de la classe (le server OLE).
On peut directement mettre le nom du fichier à visualiser et utiliser la fonction ConnectToObject
Exemple:
This example declares and creates an OLEObject variable and connects to an Excel worksheet, which is opened in Excel. It then sets a value in the worksheet, saves it, and destroys the OLEObject variable, which exits the Excel:
integer result
OLEObject myoleobject
myoleobject = CREATE OLEObject
result = myoleobject.ConnectToObject( "c:\excel\expense.xls")
IF result = 0 THEN
myoleobject.application.workbooks(1).&
worksheets(1).cells(1,1).value = 14
myoleobject.application.workbooks(1).save()
END IF
DESTROY myoleobject
http://infocenter.sybase.com/archive/in … IBDIJC.htm
Hors ligne
patrick_remy a écrit:
D'après la doc powerbuilder, on est pas obligé de mettre le nom de la classe (le server OLE).
On peut directement mettre le nom du fichier à visualiser et utiliser la fonction ConnectToObject
Exemple:
This example declares and creates an OLEObject variable and connects to an Excel worksheet, which is opened in Excel. It then sets a value in the worksheet, saves it, and destroys the OLEObject variable, which exits the Excel:
integer result
OLEObject myoleobject
myoleobject = CREATE OLEObject
result = myoleobject.ConnectToObject( "c:\excel\expense.xls")
IF result = 0 THEN
myoleobject.application.workbooks(1).&
worksheets(1).cells(1,1).value = 14
myoleobject.application.workbooks(1).save()
END IF
DESTROY myoleobject
http://infocenter.sybase.com/archive/in … IBDIJC.htm
sauf qu'il faut quand même Excel le vrai installé pour que ça fonctionne.
Au pire si Excel Viewer à la place d'excel c'est seulement une question de licence il y a toujours la possibilité de mettre Open/LibreOffice
Hors ligne
Merci pour toutes les infos.
Je vais tenter d'orienter l'utilisateur vers une installation d'Excel.
Hors ligne
François a écrit:
"sauf qu'il faut quand même Excel le vrai installé pour que ça fonctionne."
Non, Excel ne doit pas être installé. C'est le Excel Viewer qui doit être installé.
Hors ligne
patrick_remy a écrit:
François a écrit:
"sauf qu'il faut quand même Excel le vrai installé pour que ça fonctionne."
Non, Excel ne doit pas être installé. C'est le Excel Viewer qui doit être installé.
Oups j'ai zappé le bout qui dit que le Viewer implémente l'OLE
je ne sais pas pourquoi mais dans ma tête le Viewer n'avait pas la couche COM
donc oui ça devrait marcher.
Hors ligne