PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Objets dérivés dans OLE Automation
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