|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Objets dérivés dans OLE Automation |
| Débuté par jb.dumontier, 05 jan. 2005 02:01 - 4 réponses |
| |
| | | |
|
| |
| Posté le 05 janvier 2005 - 02:01 |
Bonjour
Quand on utilise OLE Automation dans VB6 il est très fréquent de d'intancier une classe à partir d'une classe parente.
Exemple pour Excel (ce n'est qu'un principe de code)
Dim Excel as Object Dim Workbook as Object
Set Excel = CreateObject("Excel.Application")
Workbook = Excel.Workbooks.Open("test.xls")
Workbook est une instance de classe que l'on peut ensuite utiliser dans le programme.
Peut-on faire pareil avec Windev?
En effet quand je regarde l'exemple de la classe CExcel de l'exemple didactique WD pilotage de Excel, je ne vois pas ce type de programmation.
On a un seul Objet OLE dynamique : c'est m_xExcel
Dans tout l'exemple je ne vois aucune classe intanciée à partir de m_xExcel, dans tous les cas on repart de la racine
par exemple : :m_xExcel>>Range(sCellule)>>Value = sValeur
Ma question est donc :
Comment peut-on utiliser une méthode qui instancie une classe comme en VB6, récupérer sa valeur dans une variable et utiliser cette variable ensuite?
Par exemple la fonction Open de la classe Excel.Workbooks est
Public Overridable Function Open(ByVal Filename As String, ....... ) ) As Excel.Workbook Membre de : Excel.Workbooks
C'est ce qui me permet d'écrire le bout de code que j'ai présenté au début de ce post |
| |
| |
| | | |
|
| | |
| |
| Posté le 05 janvier 2005 - 12:06 |
Bonjour,
Voici un exemple sous windev pour réaliser des opérations sur des documents XLS.
MaFeuilleXLS est un objet Automation dynamique
NomFichier est une chaine ="C:\temp\toto.xls"
Mois est une chaine
//Instance de Excel existante ? SI ObjetActif("Excel.Application") <> Null ALORS // Récupération de l'instance de Excel existante MaFeuilleXLS = ObjetActif("Excel.Application") SINON // Allocation de l'objet automation "MaFeuilleXLS" MaFeuilleXLS = allouer un objet Automation "Excel.Application" FIN // Excel devient visible MaFeuilleXLS>>Visible = vrai
//Ouverture du Fichier XLS MaFeuilleXLS>>Workbooks>>Open(NomFichier)
//Sélection d'un onglet MaFeuilleXLS>>Sheets("CONSTRUCTEUR")>>Select
//Initialiser une cellule MaFeuilleXLS>>Range("A1")>>Value = "SEMAINE"
//Récupérer des valeurs Mois=MaFeuilleXLS>>Range("A2")>>Value
//Sauvegarder le fichier MaFeuilleXLS>>ActiveWorkBook>>Saveas(NomFichier)
//Fermer EXCEL MaFeuilleXLS>>QUIT()
Didier |
| |
| |
| | | |
|
| | |
| |
| Posté le 05 janvier 2005 - 12:16 |
Bonjour,
Rien de telle qu'un bout de code en exemple
nLgn = 4
// *** Instanciation de la classe Excel *** Ex1 est un objet CExcel
// --- Ouverture du classeur / Sélection de la feuille --- Ex1:Ouvrir(sNomXls) Ex1:SelectionnerFeuille(sDevise)
HLitPremier("LigneMvt", gsCleParc) TANTQUE PAS HEnDehors() sIdValeur = LigneMvt.IDValeur nTypeMvt = LigneMvt.TypeMvt nTypeVal = LigneMvt.TypeVal
Ex1:EcrireValeur( "B" + nLgn, LigneMvt.IDJnl) Ex1:EcrireValeur( "C" + nLgn, DateVersChaine( LigneMvt.DateMvt)) Ex1:EcrireValeur( "D" + nLgn, TypeMouvt(nTypeMvt)) Ex1:EcrireValeur( "E" + nLgn, RechNomValeur(sIdValeur)) Ex1:EcrireValeur( "F" + nLgn, TypeValeur(nTypeVal))
Ex1:EcrireValeur( "G" + nLgn, LigneMvt.Quantite) Ex1:EcrireValeur( "H" + nLgn, LigneMvt.CoursDev) Ex1:EcrireValeur( "I" + nLgn, LigneMvt.CoursVal) Ex1:EcrireValeur( "J" + nLgn, LigneMvt.ValeurEur) // Progression de la jauge FenJauge.ProgresJauge() HLitSuivant("LigneMvt", gsCleParc) nLgn++ FIN
// --- Enregistrer le classeur actif --- Ex1:Enregistrer()
// *** Libérer l'objet Excel *** Ex1:Quitter()
Bon développement |
| |
| |
| | | |
|
| | |
| |
| Posté le 05 janvier 2005 - 13:54 |
"Jean-Baptiste Dumontier" <jb.dumontier@winnix.com> écrivait news:41db23ed $1@news.pcsoft.fr:
Set Excel = CreateObject("Excel.Application")
Workbook = Excel.Workbooks.Open("test.xls")
Salut, cela done qlq chose comme cela en W-Langage :
Excel est un objet automation "Excel.Application" Workbook est un objet automation dynamique
Workbook = Excel>>Workbooks.Open("test.xls")
//.. suite du code
//A la fin on libère les objets dynamiques Liberer Workbook
-- En esperant t'avoir aidé. |
| |
| |
| | | |
|
| | |
| |
| Posté le 05 janvier 2005 - 19:33 |
Ted
Cela marche impec. (pour l'instant)
Cette méthode permet de ne pas écrire des chaînes à rallonge comme dans l'exemple WD . De plus je soupconne que c'est un peu plus rapide car on n'a pas besoin de retrouver les pointeurs à chaque fois.
Et cela procure plus de souplesse dans la manipulation des objets automation.
Merci et grand bravo
JBD |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|