Accueil > Forum > > > > problème automation excel
problème automation excel
jeudi 10 mai 2007 à 12:39:00 |
problème automation excel

gregorian
|
Bonjour à tous, J'ai un petit problème de mise en page excel. Dans un application, je récupère des données dans un curseur qui doit alors ouvrir un fichier excel. Tout ca, ca va Maintenant, on me demande de quadriller automatiquement ce fichier. Et la j'ai un problème sur la sélection. Sur le net, j'ai trouver le code suivant: loSheet.Range['A1','E15'].select
with Selection.borders(xlEdgeLeft)
.LineStyle=xlContinuous
.Weight=xlThin
.ColorIndex=xlAutomatic
endwith Mais si je fais ca, il me sort le message d'erreur suivant: définition de classe EXCEL.APPLICATION.SELECTION introuvable Dans mon code, je rajoute donc loSel = CREATEOBJECT("Excel.Application.Selection") Mais cela ne semble pas être ca car il me renvoie le même erreur. Qqun peut il m'aider ? PS j'ai déjà été voir l'article de Mike Ganon sur atout fox mais il ne donne pas d'exemple sur la selection... ou plutot, il part d'une feuille et pas d'une sélection range de cell. Merci de votre aide. LOCAL loExcel, loBook, loSheet, lnLine loExcel = CREATEOBJECT("Excel.Application") loBook = loExcel.workbooks.add() loSheet = loBook.worksheets(1) lnLine = 2 loSheet.Range['A1','A1'].EntireColumn.ColumnWidth = 15 loSheet.Range['B1','B1'].EntireColumn.ColumnWidth = 10 loSheet.Range['C1','C1'].EntireColumn.ColumnWidth = 40 loSheet.Range['D1','D1'].EntireColumn.ColumnWidth = 30 loSheet.Range['E1','E1'].EntireColumn.ColumnWidth = 10 loSheet.Range['F1','F1'].EntireColumn.ColumnWidth = 10 loSheet.Range['G1','G1'].EntireColumn.ColumnWidth = 10 loSheet.Range['H1','H1'].EntireColumn.ColumnWidth = 20 loSheet.Range['I1','I1'].EntireColumn.ColumnWidth = 20 loSheet.Range['J1','J1'].EntireColumn.ColumnWidth = 20 loSheet.Range['K1','K1'].EntireColumn.ColumnWidth = 20 loSheet.Range['L1','L1'].EntireColumn.ColumnWidth = 20 loSheet.cells(1,1).Value = "Ref" loSheet.cells(1,2).Value = "PCB" loSheet.cells(1,3).Value = iif(snLangue = 1,"Description","Bescherming") loSheet.cells(1,4).Value = iif(snLangue = 1,"Photo","Picture") loSheet.cells(1,5).Value = iif(snLangue = 1,"Prix","Prijs") if snCont = 1 && si on ne demande pas les infos container, on ne crée pas les colonnes loSheet.cells(1,6).Value = iif(snLangue = 1,"prix container HC","Cont. prijs HC") loSheet.cells(1,7).Value = iif(snLangue = 1,"prix container 20P","Cont. prijs 20P") loSheet.cells(1,8).Value = iif(snLangue = 1,"prix container 40P","Cont. prijs 40P") loSheet.cells(1,9).Value = "Qty HC" loSheet.cells(1,10).Value = "Qty 20p" loSheet.cells(1,11).Value = "Qty 40p" loSheet.cells(1,12).Value = "usine" endif select c_result go top do while !EOF() loSheet.cells(lnLine,1).value = c_result.ref loSheet.cells(lnLine,2).value = c_result.pcb loSheet.cells(lnLine,3).value = c_result.nom *if file(gcDataDir + "PICTURES\ART\" + alltrim(c_result.ref)+".JPEG") * loSheet.range['D3','D3'].select * loSheet.pictures.insert(gcDataDir + "PICTURES\ART\" + alltrim(c_result.ref)+".JPG") *endif *loSheet.cells(lnLine,4).value = "photo" loSheet.cells(lnLine,5).value = c_result.prix if snCont = 1 && si on ne demande pas les infos container, on ne rempli pas les colonnes loSheet.cells(lnLine,6).value = iif(snCont = 1,c_result.prix_conthc,"") loSheet.cells(lnLine,7).value = iif(snCont = 1,c_result.prix_cont20,"") loSheet.cells(lnLine,8).value = iif(snCont = 1,c_result.prix_cont40,"") loSheet.cells(lnLine,9).value = iif(snCont = 1,c_result.qty_contHC,"") loSheet.cells(lnLine,10).value = iif(snCont = 1,c_result.qty_cont20,"") loSheet.cells(lnLine,11).value = iif(snCont = 1,c_result.qty_cont40,"") loSheet.cells(lnLine,12).value = c_result.c_usine endif lnLine = lnLine + 1 skip loop enddo loExcel.visible = .T. ** Quadrillage du rapport: ** Récupération de la dernière case en bas à droite utilisée *!* if snCount = 1 *!* lcMonCell = "L"+str(lnLine) *!* messagebox(lcMonCell) *!* else *!* lcMonCell = "E"+str(lnLine) *!* messagebox(lcMonCell) *!* endif loSheet.Range['A1','E15'].select with loSel.borders(xlEdgeLeft) .LineStyle=xlContinuous .Weight=xlThin .ColorIndex=xlAutomatic endwith release loSheet, loBook, loExcel ENDIF
|
|
dimanche 13 mai 2007 à 14:13:46 |
Re : problème automation excel

Mike Gagnon
|
Réponse acceptée !
Je ne suis pas sur si c'est ceci que tu recherche (J'ai enleve le curseur)
#Define xlEdgeLeft 7 #Define xlContinuous 1 #Define xlThin 2 #Define xlAutomatic -4105 #define xlNone 0 #define xlDiagonalDown 5 #define xlEdgeBottom 9 #define xlDiagonalUp 6 #define xlEdgeTop 8 #define xlEdgeRight 10 #define xlInsideHorizontal 12 #define xlInsideVertical 11 #define xlDiagonalDown 5 #define xlDiagonalUp 6 #define xlEdgeBottom 9 #define xlEdgeLeft 7 #define xlEdgeRight 10 #define xlEdgeTop 8 Local loExcel, loBook, loSheet, lnLine snLangue = 1 snCont = 1 loExcel = Createobject("Excel.Application") loBook = loExcel.workbooks.Add() loSheet = loBook.worksheets(1) lnLine = 2
loSheet.Range['A1','A1'].EntireColumn.ColumnWidth = 15 loSheet.Range['B1','B1'].EntireColumn.ColumnWidth = 10 loSheet.Range['C1','C1'].EntireColumn.ColumnWidth = 40 loSheet.Range['D1','D1'].EntireColumn.ColumnWidth = 30 loSheet.Range['E1','E1'].EntireColumn.ColumnWidth = 10 loSheet.Range['F1','F1'].EntireColumn.ColumnWidth = 10 loSheet.Range['G1','G1'].EntireColumn.ColumnWidth = 10 loSheet.Range['H1','H1'].EntireColumn.ColumnWidth = 20 loSheet.Range['I1','I1'].EntireColumn.ColumnWidth = 20 loSheet.Range['J1','J1'].EntireColumn.ColumnWidth = 20 loSheet.Range['K1','K1'].EntireColumn.ColumnWidth = 20 loSheet.Range['L1','L1'].EntireColumn.ColumnWidth = 20
loSheet.cells(1,1).Value = "Ref" loSheet.cells(1,2).Value = "PCB" loSheet.cells(1,3).Value = Iif(snLangue = 1,"Description","Bescherming") loSheet.cells(1,4).Value = Iif(snLangue = 1,"Photo","Picture") loSheet.cells(1,5).Value = Iif(snLangue = 1,"Prix","Prijs")
If snCont = 1 && si on ne demande pas les infos container, on ne crée pas les colonnes loSheet.cells(1,6).Value = Iif(snLangue = 1,"prix container HC","Cont. prijs HC") loSheet.cells(1,7).Value = Iif(snLangue = 1,"prix container 20P","Cont. prijs 20P") loSheet.cells(1,8).Value = Iif(snLangue = 1,"prix container 40P","Cont. prijs 40P") loSheet.cells(1,9).Value = "Qty HC" loSheet.cells(1,10).Value = "Qty 20p" loSheet.cells(1,11).Value = "Qty 40p" loSheet.cells(1,12).Value = "usine" Endif
*!* select c_result *!* go top *!* do while !EOF() *!* loSheet.cells(lnLine,1).value = c_result.ref *!* loSheet.cells(lnLine,2).value = c_result.pcb *!* loSheet.cells(lnLine,3).value = c_result.nom *!* *if file(gcDataDir + "PICTURES\ART\" + alltrim(c_result.ref)+".JPEG") *!* * loSheet.range['D3','D3'].select *!* * loSheet.pictures.insert(gcDataDir + "PICTURES\ART\" + alltrim(c_result.ref)+".JPG") *!* *endif *!* *loSheet.cells(lnLine,4).value = "photo" *!* loSheet.cells(lnLine,5).value = c_result.prix *!* *!* if snCont = 1 && si on ne demande pas les infos container, on ne rempli pas les colonnes *!* loSheet.cells(lnLine,6).value = iif(snCont = 1,c_result.prix_conthc,"") *!* loSheet.cells(lnLine,7).value = iif(snCont = 1,c_result.prix_cont20,"") *!* loSheet.cells(lnLine,8).value = iif(snCont = 1,c_result.prix_cont40,"") *!* loSheet.cells(lnLine,9).value = iif(snCont = 1,c_result.qty_contHC,"") *!* loSheet.cells(lnLine,10).value = iif(snCont = 1,c_result.qty_cont20,"") *!* loSheet.cells(lnLine,11).value = iif(snCont = 1,c_result.qty_cont40,"") *!* loSheet.cells(lnLine,12).value = c_result.c_usine *!* endif *!* lnLine = lnLine + 1 *!* skip *!* loop *!* enddo loExcel.Visible = .T.
** Quadrillage du rapport:
** Récupération de la dernière case en bas à droite utilisée *!* if snCount = 1 *!* lcMonCell = "L"+str(lnLine) *!* messagebox(lcMonCell) *!* else *!* lcMonCell = "E"+str(lnLine) *!* messagebox(lcMonCell) *!* endif
loSheet.Range("A1:D20").Select With loExcel .Selection.BorderS(xlDiagonalDown).LineStyle = xlNone .Selection.BorderS(xlDiagonalUp).LineStyle = xlNone With .Selection.BorderS(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith With .Selection.BorderS(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith With .Selection.BorderS(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith With .Selection.BorderS(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith With .Selection.BorderS(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith With .Selection.BorderS(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Endwith Endwith
Release loSheet, loBook, loExcel
Mike Gagnon
|
|
lundi 14 mai 2007 à 10:41:30 |
Re : problème automation excel

gregorian
|
Merci beaucoup.
Ca fonctionne à merveille.
Peux tu me dire ou je pourrais trouver une doc sur les fonctions excell pour savoir au moins dans qu'elle direction aller lorsque je dois faire ce genre de chose.
J'ai rechercher sur le net mais sans succès.
Merci
|
|
lundi 14 mai 2007 à 12:10:25 |
Re : problème automation excel

Mike Gagnon
|
A part les #DEFINE, la meilleur facon de faire est lorsque tu veux faire quelque chose avec Excel, enregistre une Macro, fais ce que tu as a faire, ferme ta Macro, edite la macro, et tout le code ci trouve (En VB, mais tres proche de VFP). Tools-Macro-Record a new Macro.
Mike Gagnon
|
|
lundi 14 mai 2007 à 13:18:12 |
Re : problème automation excel

MichelAtoutFox
|
Tu peux aussi utiliser l'explorateur d'objet de VFP, pour récupérer toutes les constantes de VB (celles que Mike redéfinit en constantes de précompilation), et les propriétés et méthodes utilisables en automation sur Excel
|
|
Cette discussion est classée dans : value, losheet, cells, lnline, range
Répondre à ce message
Sujets en rapport avec ce message
textbox numérique [ par jee0404 ]
bonjour, J,ai un problème avec un textbox numérique. C'est pour la rentré de chiffre dans un textbox. Le problème c'est que je met l'inputmask a '99,9
affichage de données et tri [ par zouheir_ali ]
Bonjour à tous,je travaille avec vfp9 et sqlserver.dans une form j'ai des zones et une grille qui sont reliés par le même curseurje crée un curseur av
modification d'une table [ par slimvir ]
bonjour, j'utilise ce code pour modifier une ligne d'une table mais cette ligne ne se modifier mais elle s'ajoute ?? merciSELECT table1replace Codcli
Livres en rapport
|
Derniers Blogs
PB LORS DE L'INSTALLATION SHAREPOINT 2010.PB LORS DE L'INSTALLATION SHAREPOINT 2010. par Patrick Guimonet
Lors de l'installation de SharePoint 2010, j'ai rencontré un problème de plantage à l'étape 5 du configuration Wizard. Ca se termine sur cet écran : Et en analysant le fichier de journalisation, on remarque vers la fin des 15000 et quelques lign...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2) par JeremyJeanson
Après mon précédent article qui attaque les contraintes par la fasse Nord de l'Everest. passons à la seconde possibilité offerte par WF4 pour valider une activité : la metadata . Je vous en ai déjà toucher un ou deux mots. La metadata dans WF4 est un élém...
Cliquez pour lire la suite de l'article par JeremyJeanson [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2) par JeremyJeanson
De WF3 à WF4 pas mal de choses on été changées pour faciliter la vie des développeurs, mais certain points peuvent sembler obscures. comme les contraintes. Pour vous guider, je me lance dans une série de deux articles. Ils présenterons deux approches poss...
Cliquez pour lire la suite de l'article par JeremyJeanson [ASP.NET] NE PAS SE FAIRE AVOIR PAR IHTTPMODULE ET SA MéTHODE INIT()[ASP.NET] NE PAS SE FAIRE AVOIR PAR IHTTPMODULE ET SA MéTHODE INIT() par tja
Beaucoup de développeurs pensent que lorsqu'on créé et enregistre un IHttpModule, il n'en existe qu'une seule instance et la méthode Init() sera appelée qu'une fois.
C'est faux
Cela peut vraiment créer des bugs subtils dont en ne se rend pas compte ...
Cliquez pour lire la suite de l'article par tja [MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER[MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER par phil
Un post rapide pour vous informer de la disponibilité de la vidéo de ma présentation sur SharePoint 2010 & Team Foundation Server. http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=20215d48-02e3-4d43-8c36-e53505c3b316 Dans la ...
Cliquez pour lire la suite de l'article par phil
Forum
RE : TXT VERS DBFRE : TXT VERS DBF par MichelAtoutFox
Cliquez pour lire la suite par MichelAtoutFox RE : TXT VERS DBFRE : TXT VERS DBF par MichelAtoutFox
Cliquez pour lire la suite par MichelAtoutFox
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|