Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+13The Gamer Nardo26 silverman Minibug Pedro mindstorm pascal10000 Jicehel papydall Jean Claude JL35 Yannick Klaus 17 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 30 Mar 2015 - 1:30 | |
| Il retourne bien les guillemets. Regarde le contenu de la liste - ils y sont. C''est Panoramic qui les bouffe - un problème bien connu. Rends la liste visible et tu le verras. Essaie avec le code que je viens de poster... Alternativement, charge ta variable a$ de la manière suivante: - Code:
-
a$=" "+item_read$(ListCopy%,1) Tu es tombé sur un effet secondaire du traitement des chaînes de caractères que j'ai signalé depuis longtemps. Il faut juste le savoir... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 30 Mar 2015 - 1:45 | |
| Effectivement, autant pour moi ! J' arrête le combat pour ce soir, je vais faire un puzzle, cela me changera les idées. J' ai le caberlot qui va finir par exploser... Heu... il faut que je mette le zip à jour avant | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 30 Mar 2015 - 17:38 | |
| Nouvelle version: KGF.dll V4.57 du 30/03/2015
Nouveautés: finalisation de la fonction WriteGridCell
Modules modifiés: KGF.dll KGF.chm
La doc et les sources sont à jour.
Cette fonction permet d'écrire une cellule d'un GRID (identique à GridWrite), juste pour avoir un ensemble cohérent. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 10:49 | |
| Nouvelle version: KGF.dll V4.58 du 31/03/2015
Nouveautés: transformation de la fonction WriteGridCell en WriteGridCellsModules modifiés: KGF.dll KGF.chm
La doc et les sources sont à jour. Cette fonction permet d'écrire un rectangle de cellules d'un GRID en une seule opération. Le programme de démo suivant a été adapté à cela: Sélectionnez un rectangle de cellules, puis cliquez sur "Remplacer". Renouvelez l'opération avec d'autres rectangles, ou un clic dans une seule cellule... - Code:
-
' demo_GetSelectedGridText.bas label clic, exit, enligne, couleur, remplacer dim s$, res%, x1%, y1%, x2%, y2%, x%, y%, i%, sepcel$, seplin$ dim RGB%, d%, att%,FRGB%, xd%, xf%
grid 1 : top 1,250 : left 1,10 grid_write 1,2,2,"aaa" grid_write 1,2,3,"bbb" grid_write 1,3,3,"ccc" grid_write 1,4,3,"ddd" grid_write 1,4,4,"eee" on_click 1,clic
check 2 : top 2,10 : left 2,10 : width 2,150 : on_click 2,enligne caption 2,"GRID avec édition en ligne" button 3 : top 3,190 : left 3,60 : width 3,200 : caption 3,"Appliquer attributs" on_click 3,couleur
check 4 : top 4,40 : left 4,110 : width 4,150 : on_click 4,enligne caption 4,"sans colorer les parties fixes"
combo 5 : top 5,70 : left 5,110 : width 5,150 item_add 5,"à gauche" item_add 5,"centré" item_add 5,"à droite"
combo 6 : top 6,100 : left 6,110 : width 6,150 font_names_load 6
alpha 7 : top 7,130 : left 7,10 : caption 7,"Taille:" combo 8 : top 8,130 : left 8,110 : width 8,40 item_add 8,"8" item_add 8,"10" item_add 8,"12" item_add 8,"14" check 9 : top 9,160 : left 9, 10 : caption 9,"Gras" check 10 : top 10,160 : left 10, 90 : caption 10,"Italique" check 11 : top 11,160 : left 11,170 : caption 11,"Souligné" check 12 : top 12,160 : left 12,250 : caption 12,"Barré"
button 20 : top 20,380 : left 20,10 : caption 20,"Remplacer" on_click 20,remplacer
memo 99 : top 99,10 : left 99,360 : bar_both 99 : height 99,400
' dll_on "KGF_GRID.dll" dll_on "KGF.dll" ' on_close 0,exit
res% = dll_call2("SelectComboBoxItem",handle(5),1) for i%=1 to count(6) if item_read$(6,i%)="Arial" res% = dll_call2("SelectComboBoxItem",handle(6),i%) exit_for end_if next i% res% = dll_call2("SelectComboBoxItem",handle(8),2)
end
exit: res% = dll_call1("KillProcessByHandle",handle(0)) return remplacer: ' récupérer les coordonnées du rectangle sélectionné item_add 99,"GetSelectedGridIndexes en cours..." res% = DLL_call5("GetSelectedGridIndexes",object_internal(1),adr(x1%),adr(y1%),adr(x2%),adr(y2%)) item_add 99,"GetSelectedGridIndexes ok" ' message "Rectangle: ("+str$(x1%)+","+str$(y1%)+") --> ("+str$(x2%)+","+str$(y2%)+")"
' remplacer le texte des cellules sélectionnées par autre chose s$ = "" xd% = x1% xf% = x2% for y%=y1% to y2% for x%=xd% to xf% s$ = s$ + "L"+str$(y%) + " C"+str$(x%) + sepcel$ next x% next y% item_add 99,"WriteGridCells en cours..." res% = dll_call6("WriteGridCell",object_internal(1),x1%,y1%,x2%,y2%,adr(s$)) item_add 99,"WriteGridCells ok" return
xd% = x1% xf% = x2% for y%=y1% to y2% for x%=xd% to xf% s$ = "L"+str$(y%) + " C"+str$(x%) res% = dll_call4("WriteGridCell",object_internal(1),x%,y%,adr(s$)) next x% next y% item_add 99,"WriteGridCells ok" return
clic: clear 99
' paramétrer les séparateurs (ce sont d'ailleurs les valeurs par défaut) sepcel$ = "\" seplin$ = "\" : ' chr$(13)+chr$(10) item_add 99,"SetGridSeparators en cours..." res% = dll_call2("SetGridSeparators",adr(sepcel$),adr(seplin$)) item_add 99,"SetGridSeparators ok"
' récupérer les coordonnées du rectangle sélectionné item_add 99,"GetSelectedGridIndexes en cours..." res% = DLL_call5("GetSelectedGridIndexes",object_internal(1),adr(x1%),adr(y1%),adr(x2%),adr(y2%)) item_add 99,"GetSelectedGridIndexes ok" ' message "Rectangle: ("+str$(x1%)+","+str$(y1%)+") --> ("+str$(x2%)+","+str$(y2%)+")"
' récupérer le texte des cellules sélectionnées s$ = string$(255," ") item_add 99,"GetSelectedGridText en cours..." res% = DLL_call2("GetSelectedGridText",object_internal(1),adr(s$)) item_add 99,"GetSelectedGridText ok" s$ = trim$(s$) ' message s$ return
enligne: i% = checked(2) : ' inverser le mode "édition" res% = dll_call6("GridFunction",object_internal(1),1,i%,0,0,0) return couleur: d% = checked(4)*3
' forcer le centrage att% = val(item_index$(8)) if checked(9) =1 then att% = att% + 256 if checked(10)=1 then att% = att% + 512 if checked(11)=1 then att% = att% + 1024 if checked(12)=1 then att% = att% + 2048 s$ = item_index$(6) res% = dll_call6("GridFunction",object_internal(1),9,item_index(5)-1,att%,adr(s$),0)
' remplacer ONDRAWCELL res% = dll_call6("GridFunction",object_internal(1),8,1,0,0,0)
' changer la couleur d'une colonne RGB(255,255,255) : ' écriture blanche FRGB% = RGB% RGB(255,0,0) : ' fond rouge res% = dll_call6("GridFunction",object_internal(1),4+d%,2,0,RGB%,FRGB%)
' changer la couleur d'une ligne RGB(255,255,0) : ' écriture jaune FRGB% = RGB% RGB(0,0,255) : ' fond bleu res% = dll_call6("GridFunction",object_internal(1),3+d%,0,3,RGB%,FRGB%)
' changer la couleur d'une cellule RGB(0,0,255) : ' écriture bleue FRGB% = RGB% RGB(255,255,0) : ' fond jaune res% = dll_call6("GridFunction",object_internal(1),2,2,3,RGB%,FRGB%) return
sub RGB(R%,G%,B%) RGB% = (B%*256+R%)*256+G% end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 12:58 | |
| Tu me donnes une idée Klaus pour compléter tes fonction grid et tes fonction Excel. Tu devrais créer 2 fonctions dans KGF, une qui copie de la grille vers Excel en gardant toute la mise en forme et sa réciproque d'Excel vers la grille en gardant le formatage. D'après ce que j'ai vu dans les fonctions disponibles, ça me permet faisable, mais je me trompe peut être. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 13:01 | |
| C'est une idée intéressante à creuser. Je vais regarder cela.
Pour commencer, il faudrait faire une maquette en utilisant les fonctions existantes. On verra. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 16:28 | |
| Oui, c'est intéressant mais ce serait bien mieux si cela pouvait également fonctionner avec Open_Calc (pour ceux qui n'on pas Excel).
Mais c'est peut-être trop de boulot.
A+
Dernière édition par Jean Claude le Mar 31 Mar 2015 - 20:45, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 16:36 | |
| Je ne suis pas contre un lien vers OpenCalc. Problème: je n'ai pas OpenOffice, et je n'ai aucune doc à ce sujet.
EDIT
Rectification: j'ai trouvé un module compatible qui peut faire des opérations indifféremment sur Excel et OpenCalc ! Je suis en train de l'adapter. Pour le moment, ouverture, fermeture et test de statut fonctionnent ! J'aurai bientôt un ensemble cohérent, et on aura alors le passage d'un GRID à Excel et/ou à OpenCalc, ainsi que le sens de retour ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 20:38 | |
| Excellent, la boucle sera bouclée On pourra ouvrir une feuille Excel (ou OpenCalc) dans Panoramic et la resauvegarder sous Excel (ou OpenCalc) sans perdre la mise en forme. Pas mal, pas mal. Je ne parle pas non plus simplement de la possibilité d'exporter nos grilles dans ces 2 formats | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 20:44 | |
| - Klaus a écrit:
- Je ne suis pas contre un lien vers OpenCalc. Problème: je n'ai pas OpenOffice, et je n'ai aucune doc à ce sujet.
Là, tu m'étonnes Open_Office est un open source, il suffit de le télécharger ( précaution pour ceux qui ont la suite Microsoft Office: Faites l'installation sur un Disque dur ou une partition à part, car je me souvient que la cohabitation est un peu difficile) EDIT - Klaus a écrit:
Rectification: j'ai trouvé un module compatible qui peut faire des opérations indifféremment sur Excel et OpenCalc ! Je suis en train de l'adapter. Pour le moment, ouverture, fermeture et test de statut fonctionnent ! J'aurai bientôt un ensemble cohérent, et on aura alors le passage d'un GRID à Excel et/ou à OpenCalc, ainsi que le sens de retour ! C'est super, ainsi tous pourront profiter des fonctions GRID de KGF.dll. Merci ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 31 Mar 2015 - 21:22 | |
| Nouvelle version: KGF.dll V4.59 du 31/03/2015Nouveautés: version préliminaire avec gestion Excel/OpenCalcModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. Voici une idée de ce qui existe déjà: - Code:
-
' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%) ' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible
' se déconnecter du tableur et le fermer res% = dll_call0("TerminateSpreadSheet")
' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType") res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc
' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$)) ' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu
' exporter un GRID dans la page active directement res% = dll_call3("ExportGridToSpreadSheet",object_internal(grid%),deltax%,deltay%) ' grid%=numéro du GRID ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active
' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$)) ' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue
' importer un GRID de la page active directement res% = dll_call3("ImportGridFromSpreadSheet",object_internal(grid%),deltax%,deltay%) ' grid%=numéro du GRID ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active Et voici une première petite démo. Le programme affiche un GRID de 11 lignes sur 8 colonnes. Le menu Fichiers" permet de lancer et arrêter le tableur et d'exporter le contenu du GRID dans le tableur. Le programme essaie d'abord d'ouvrir Excel. Si absent, il tente OPenCalc avant de jeter l'éponge. Le menu Options contient une ligne Mode Edition. Lorsque cette case est cochée, on peut saisir directement dans le GRID ! Alors, saisissez quelques cellules, puis exportez vers le tableur... - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label test_what
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
dll_on "KGF.dll"
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call0("TerminateSpreadSheet") end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas res% = dll_call3("ExportGridToSpreadSheet",object_internal(100),3,2) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call3("ImportGridFromSpreadSheet",object_internal(100),3,2) end_sub
sub Test_What() dim_local res%
res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
Ceci préfigure ce que sera la gestion Excel/OPenCalc dans l'avenir. EDIT Le code ci-dessus a été mis à jour avec une nouvelle fonction exportant directement un GRID entier dans la page active du document actif du tableur ! Plus besoin de faire une boucle. Même les dimensions du GRID sont détectées automatiquement. EDIT Deux nouvelles fonctions: - lecture d'une cellule de la page active du document actif du tableur - import direct d'un GRID entier à partir du tableur, symmétrique à la fonction d'export. On a maintenant: start, stop, test état, écriture cellule, lecture cellule, export GRID, import GRID.Ca fait déjà un bel ensemble, non ? A partir de demain, je vais m'occuper de la gestion des pages, sauvegarde/ouverture de document, aspects graphiques etc. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 1 Avr 2015 - 11:12 | |
| Nouvelle version: KGF.dll V4.60 du 01/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec Open, Save, SaveAsModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call0("TerminateSpreadSheet")' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas label test_what
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call0("TerminateSpreadSheet") end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mer 1 Avr 2015 - 12:01 | |
| Classe et en plus ça étend l'offre à OpenOffice. Bon maintenant pour que l'on puisse écrire les articles directement dans des memo Panoramic et que l'on puisse les sauvegarder au format OpenOffice, Acrobat ou Word, il ne reste plus qu'à faire la même chose ^^ (Si tu as une panne d'idées pour avoir du boulot, tu peux toujours compter sur moi .... ) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Avr 2015 - 13:57 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 1 Avr 2015 - 16:02 | |
| Nouvelle version: KGF.dll V4.61 du 01/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec Close et avec la gestion des pages d'un documentModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call0("TerminateSpreadSheet")' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son incide res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call0("TerminateSpreadSheet") end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mer 1 Avr 2015 - 18:29 | |
| Pour écrire à notre place, pas évident, mais un petit programme Panoramic qui permettent de faire la conversion en Word / Open Office / PDF, ça serait bien pratique, que l'on modifie ou non le texte dans Panoramic. L'avantage c'est qu'avec la DLL, on a accès au memos formatés. On peut donc si je ne m'abuse (je rêve peut être, mais comme Klaus a tendance à rendre les rêves possibles ...). On pourrait donc tous travailler sur les articles sans se soucier du format. Par contre quand j'ai écrit ça, je n'ai pas penser aux illustrations qui poseront certainement problème au niveau de la mise en page. bon on vera bien ce qu'en dit Klaus. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 1 Avr 2015 - 20:22 | |
| Houla !!! çà bouge, Je vais avoir du travail, dans les semaines à venir... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 2 Avr 2015 - 0:22 | |
| Nouvelle version: KGF.dll V4.62 du 02/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec Close et avec la suppression d'une page d'un document et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call0("TerminateSpreadSheet")' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc ! - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 2 Avr 2015 - 2:06 | |
| Pour info: avec les fonctions de gestion Excel/OpenCalc, on peut: - copier un document Excel dans un document OPenCalc et inverse - garder deux objets GRID en Panoramic et gérer dans le premier les données d'un tableau Excel ou OpenCalc, et dans l'autre les formules. Avec bien sûr la possibilité de passer d'un tableur à l'autre. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 2 Avr 2015 - 7:51 | |
| Bravo Klaus. C'est vraiment puissant et pratique. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 2 Avr 2015 - 14:20 | |
| Nouvelle version: KGF.dll V4.63 du 02/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec dimensions des lignes/colonnes et couleurs de fond/police et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,700
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 2 Avr 2015 - 16:53 | |
| Nouvelle version: KGF.dll V4.64 du 02/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec nom et taille de police et les attributs graphiques et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% ' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si adr(font$) est passé comme 0, la police n'est pas changée ' siz%=nouvelle taille de la police si siz%>0 ' atributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1 Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name, pol_att label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,700
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 3 Avr 2015 - 13:49 | |
| Nouvelle version: KGF.dll V4.65 du 03/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec bordures des cellules et leurs couleurs et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc et les sources seront à jour prochainement. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% ' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si siz%=0 la taille ne sera pas changée ' si adr(font$) est passée comme 0, la police ne sera pas changée ' atributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1 ' bordures autour des cellules res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%) ' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut ' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point ' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées, choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name label pol_att, borders label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,750
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:" check 162 : top 162,30 : left 162,590 : caption 162,"Haut" check 163 : top 163,60 : left 163,550 : caption 163,"Gauche" check 164 : top 164,60 : left 164,630 : caption 164,"Droite" check 165 : top 165,90 : left 165,590 : caption 165,"Bas" check 166 : top 166,120 : left 166,550 : caption 166,"Diag \" check 167 : top 167,120 : left 167,630 : caption 167,"Diag /" combo 168 : top 168,150 : left 168,550 item_add 168,"0 = Aucun" item_add 168,"1 = Trait" item_add 168,"2 = Tirets" item_add 168,"3 = Points" item_add 168,"4 = Tiret point" item_add 168,"5 = Tiret point point" item_add 168,"6 = Moyen tiret slash point" item_add 168,"7 = Trait" item_add 168,"8 = Tirets" item_add 168,"9 = Double" text 168,item_read$(168,1)
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
borders: Borders() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
sub Borders() dim_local res%, l%, c%, nam$, s$, style%, clr%, i% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) style% = item_index(168) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
' pour documenter les possibilités for i%=1 to count(168) res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%) s$ = item_read$(168,i%) res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0) next i%
' bords individuels de la cellule choisie if checked(162)=1 : ' haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0) end_if if checked(163)=1 : ' gauche res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0) end_if if checked(164)=1 : ' droite res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0) end_if if checked(165)=1 : ' bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0) end_if if checked(166)=1 : ' diagonal haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0) end_if if checked(167)=1 : ' diagonal bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0) end_if s$ = "Style "+str$(style%) res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0) end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 6 Avr 2015 - 12:33 | |
| Nouvelle version: KGF.dll V4.66 du 04/04/2015Nouveautés: suite de la gestion Excel/OpenCalc avec sélection d'un rectangle, récupération des coordonnées de la sélection active, et application d'une bordure à un rectangle sélectionné et des tests de toutes les fonctions avec OpenCalcModules modifiés: KGF.dllLa doc sera à jour prochainement. Les sources sont à jour. On peut même importer/exporter séparément, maintenant, les données et les formules ! Doc provisoire de l'existant: ' ouvrir un tableur et se connecter à ce tableur res% = dll_call2("StartSpreadSheet",quoi%,visible%)' quoi%: 1=Excel 2=OPenCalc visible%: 1=visible 0=non visible ' se déconnecter du tableur et le fermer res% = dll_call1("TerminateSpreadSheet",%kill)kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement ' tester quel tableur est actif res% = dll_call0("GetSpreadSheetType")res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc ' écrire une cellule de la page active du document actif res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu ' exporter un GRID dans la page active directement res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active ' lire une cellule de la page active du document actif res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))' x%=colonne y%=ligne txt$=données frm$=formule si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue ' importer un GRID de la page active directement res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)' grid%=numéro du GRID ' act%: 0=en tant que données 1=en tant que formules ' deltax%, deltay% = délacage horizontal/vertical en source dans la page active ' ouvrir un document existant res% = dll_call1("OpenSpreadSheet",adr(f$))' f$ = chemin et nom vers le fichier existant ' enregistrer un document du tableur res% = dll_call0("SaveSpreadSheet")' note: il faut que ce document ait déjà un nom ! ' enregistrer un document dans un autre fichier res% = dll_call1("SaveSpreadSheetAs",adr(f$))' f$ = chemin et nom vers le nouveau fichier ' fermer un document res% = dll_call0("CloseSpreadSheet")' insérer une nouvelle page res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)' nom$=nom de la page ' pos%=position 0=après la page active 1=après la dernière page ' activer une page par son indice res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' activer une page par son nom res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))' s$=nom de la page recherchée ' supprimer une page par son indice res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)' n%=indice (1,2,...) ' supprimer une page par son nom res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))' s$=nom de la page à supprimer ' retourner le nombre de pages du document res% = dll_call0("GetSpreadSheetPageCount")' retourner l'indice de la page active res% = dll_call0("GetSpreadSheetActivePageNumber")' retourner le nom de la page active res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))nom$ recevra le nom de la page active ' ajuster les dimensions d'une ligne et/ou d'une colonne res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%) ' si l%>0, la ligne l% sera mise à h% millimètres de hauteur ' si c%>0, la colonne c% sera mise à w% millimètres de largeur ' couleurs de fond et/ou de police d'une cellule res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%) ' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr% ' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr% ' nom et/ou taille de la police res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%) ' si siz%=0 la taille ne sera pas changée ' si adr(font$) est passée comme 0, la police ne sera pas changée ' atributs graphiques des caractères res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%) ' les attributs sont passée en 0 ou 1 ' bordures autour des cellules res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%) ' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut ' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point ' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double ' sélectionner un rectangle res% = dll_call4("SelectSpreadSheetRange",x1%,y1%,x2%,y2%) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' récupérer le rectangle de la sélection actuelle res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) ' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite ' appliquer une bordure à la sélection actuelle res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%) ' bord%: somme des valeurs suivantes: ' 1 =haut 2=gauche 4=droite 8=bas 16=diagonal haut 32=diagonal bas 64=intérieur horizontal 128= intérieur vertical Et voici le programme de démo avec toutes les fonctions: (note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !) Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options. Toutes les fonctions ont été testées avec Excel et OpenCalc !Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire. Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées, choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures. Ou pour un rectangle: dans le menu Edition, choisissez Selection, cofigurez la bordure avec les champs à droite, puis utilisez menu Edition`\Bordure de sélection. - Code:
-
' GRID_et_EXCEL.bas
label connect, exit, editmode, export, import, disconnect label open, save, saveas, close label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name label col_width, line_height, back_color, pol_color, pol_size, pol_name label pol_att, borders, sel_range, sel_borders label test_what, page_count, ind_actif, name_act
dim nlin% : nlin% = 11 dim ncol% : ncol% = 8
dim res%, no%, no1%, no2%, editmode%
width 0,750
no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sélection" : on_click no%,sel_range no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures de sélection" : on_click no%,sel_borders no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act
grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280 grid_column 100,ncol% : grid_row 100,nlin%
option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130 option 112 : top 112,340 : left 112,50 : caption 112,"Excel" option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"
alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:" edit 122 : top 122,320 : left 122,250 : width 122,40 alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:" edit 124 : top 124,320 : left 124,360 : width 124,40
alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:" edit 132 : top 132,350 : left 132,250 : width 132,40 alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:" edit 134 : top 134,350 : left 134,360 : width 134,40
alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:" combo 142 : top 142,320 : left 142,470 : width 142,40 item_add 142,8 item_add 142,10 item_add 142,12 item_add 142,14 item_add 142,16 text 142,10 combo 143 : top 143,350 : left 143,470 : width 143,130 font_names_load 143 text 143,"Arial"
check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151 check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152 check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153 check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154
alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:" check 162 : top 162,30 : left 162,590 : caption 162,"Haut" check 163 : top 163,60 : left 163,550 : caption 163,"Gauche" check 164 : top 164,60 : left 164,630 : caption 164,"Droite" check 165 : top 165,90 : left 165,590 : caption 165,"Bas" check 166 : top 166,120 : left 166,550 : caption 166,"Diag \" check 167 : top 167,120 : left 167,630 : caption 167,"Diag /" check 168 : top 168,150 : left 168,550 : caption 168,"Intérieur -" check 169 : top 169,150 : left 169,630 : caption 169,"Intérieur |" combo 170 : top 170,180 : left 170,550 item_add 170,"0 = Aucun" item_add 170,"1 = Trait" item_add 170,"2 = Tirets" item_add 170,"3 = Points" item_add 170,"4 = Tiret point" item_add 170,"5 = Tiret point point" item_add 170,"6 = Moyen tiret slash point" item_add 170,"7 = Trait" item_add 170,"8 = Tirets" item_add 170,"9 = Double" text 170,item_read$(170,1)
open_dialog 101 save_dialog 102
dll_on "KGF.dll"
mark_on 111
end
exit: terminate test_what: Test_What() return
connect: ConnectToExcel() return disconnect: DisconnectFromExcel() return
open: open() return
saveas: SaveAs() return save: Save() return close: Close() return new_sheet: NewSheet() return
act_by_ind: ActivateIndex() return act_by_name: ActivateName() return
del_by_ind: RemoveIndex() return
del_by_name: RemoveName() return
page_count: GetPageCount() return
ind_actif: GetActiveIndex() return
name_act: GetActiveName() return col_width: SetColWidth() return line_height: SetLineHeight() return back_color: BackColor() return pol_color: FontColor() return
pol_size: FontSize() return
pol_name: FontName() return
pol_att: FontAttributes() return
borders: Borders() return
sel_range: SelectRange() return sel_borders: SelectionBorders() return
editmode: editmode% = 1 - editmode% if editmode%=0 res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0) mark_off number_click else res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0) mark_on number_click end_if return export: ExportGridToExcel() return import: ImportGridFromExcel() return
sub ConnectToExcel() dim_local res% if checked(111)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "Aucun tableur n'est trouvé" end_if end_if if checked(112)=1 res% = dll_call2("StartSpreadSheet",1,1) : ' essayer Excel if res%<0 then message "Excel n'est pas trouvé" end_if if checked(113)=1 res% = dll_call2("StartSpreadSheet",2,1) : ' essayer OpenCalc if res%<0 then message "OpenCalc n'est pas trouvé" end_if end_sub
sub DisconnectFromExcel() dim_local res% res% = dll_call1("TerminateSpreadSheet",1) end_sub
sub ExportGridToExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub ' 1ère alternative: export par fonction directe ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas ' res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2) ' sans décalage: res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0) exit_sub
' 2ème alternative: export par boucle for y%=1 to nlin% for x%=1 to ncol% s$ = grid_read$(100,y%,x%) res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0) next x% next y% end_sub
sub ImportGridFromExcel() dim_local res%, x%, y%, s$ res% = dll_call0("GetSpreadSheetType") if res%<1 then exit_sub res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2) end_sub
sub Test_What() dim_local res% res% = dll_call0("GetSpreadSheetType") select res% case -1: message "aucun tableur n'est lancé" case 0: message "un tableur a été lancé, mais il n'est plus disponible" case 1: message "Excel est en cours..." case 2: message "OpenCalc est en cours..." end_select end_sub
sub open() dim_local res%, f$ filter 101,"Fichiers Excel|*.xls" f$ = file_name$(101) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("OpenSpreadSheet",adr(f$)) end_sub
sub SaveAs() dim_local res%, f$ filter 102,"Fichiers Excel|*.xls" f$ = file_name$(102) if f$="_" then exit_sub if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls" res% = dll_call1("SaveSpreadSheetAs",adr(f$)) end_sub
sub Save() dim_local res% res% = dll_call0("SaveSpreadSheet") end_sub
sub Close() dim_local res% res% = dll_call0("CloseSpreadSheet") end_sub
sub NewSheet() dim_local res%, nom$ nom$ = message_input$("Nouvelle page","Nom de la page:","") if nom$="" then exit_sub res% = dll_call2("NewSpreadSheetPage",adr(nom$),1) end_sub
sub ActivateIndex() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("ActivateSpreadSheetPageByIndex",n%) end_sub
sub ActivateName() dim_local res%, n%, s$ s$ = message_input$("Activer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$)) end_sub
sub RemoveIndex() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Numéro de la page:","") if s$="" then exit_sub if numeric(s$)=0 then exit_sub n% = val(s$) res% = dll_call1("RemoveSpreadSheetPageByIndex",n%) end_sub
sub RemoveName() dim_local res%, n%, s$ s$ = message_input$("Supprimer une page","Nom de la page:","") if s$="" then exit_sub res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$)) end_sub
sub GetPageCount() dim_local res% res% = dll_call0("GetSpreadSheetPageCount") message "Le document a "+str$(res%)+" pages" end_sub
sub GetActiveIndex() dim_local res% res% = dll_call0("GetSpreadSheetActivePageNumber") message "La page active est la page numéro "+str$(res%) end_sub
sub GetActiveName() dim_local res%, nom$ nom$ = string$(255," ") res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$)) message "La page actuelle s'appelle ["+trim$(nom$)+"]" end_sub
sub SetColWidth() dim_local res%, s$, c%, w% s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) s$ = trim$(text$(124)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub w% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%) end_sub
sub SetLineHeight() dim_local res%, s$, l%, h% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(134)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub h% = val(s$)*100 res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0) end_sub
sub BackColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*255+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0) end_sub
sub FontColor() dim_local res%, l%, c%, clr%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%) end_sub
sub FontSize() dim_local res%, l%, c%, siz%, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) siz% = val(text$(142)) res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%) end_sub
sub FontName() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0) end_sub
sub FontAttributes() dim_local res%, l%, c%, nam$, s$ s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) nam$ = text$(143) res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154)) end_sub
sub Borders() dim_local res%, l%, c%, nam$, s$, style%, clr%, i% s$ = trim$(text$(132)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub l% = val(s$) s$ = trim$(text$(122)) if len(s$)=0 then exit_sub if numeric(s$)=0 then exit_sub c% = val(s$) style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
' pour documenter les possibilités for i%=1 to count(170) res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%) s$ = item_read$(170,i%) res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0) next i%
' bords individuels de la cellule choisie if checked(162)=1 : ' haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0) end_if if checked(163)=1 : ' gauche res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0) end_if if checked(164)=1 : ' droite res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0) end_if if checked(165)=1 : ' bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0) end_if if checked(166)=1 : ' diagonal haut res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0) end_if if checked(167)=1 : ' diagonal bas res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%) else res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0) end_if s$ = "Style "+str$(style%) res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0) end_sub sub SelectRange() dim_local res%, x1%, y1%, x2%, y2% res% = dll_call4("SelectSpreadSheetRange",4,5,7,12) res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%)) message "Sélection: ("+str$(x1%)+","+str$(y1%)+") -> ("+str$(x2%)+","+str$(y2%)+")" end_sub
sub SelectionBorders() dim_local res%, style%, clr%, bord% style% = item_index(170) if style%=0 then style% = 1 style% = style% - 1 clr% = (rnd(255)*256+rnd(255))*256+rnd(255) res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)
bord% = 0 if checked(162)=1 then bord% = bord% + 1 : ' haut if checked(163)=1 then bord% = bord% + 2 : ' gauche if checked(164)=1 then bord% = bord% + 4 : ' droite if checked(165)=1 then bord% = bord% + 8 : ' bas if checked(166)=1 then bord% = bord% + 16 : ' diagonal haut if checked(167)=1 then bord% = bord% + 32 : ' diagonal bas if checked(168)=1 then bord% = bord% + 64 : ' intérieur horizontal if checked(169)=1 then bord% = bord% + 128 : ' intérieur vertical
res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)
end_sub
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 6 Avr 2015 - 14:28 | |
| Salut Klaus J’ai téléchargé la nouvelle version de KGF.DLL puis j’ai lancé le code que tu as donné comme exemple en modifiant uniquement le chemin de la dll et sans même jeté un œil sur le code. Ne sachant trop ce que je dois faire, j’ai choisis Fichier / sortir : conséquence : plantage et aucune possibilité de m’en sortir même pas avec tuer le processus. La seule issue était de Redémarrer. J’ai regardé le code de plus près : la cause c’est TERMINATE. Une fois de plus, cette commande m’a joué des tours !. J’ai du la remplacer par - Code:
-
res% = dll_call1("KillProcessByHandle",handle(0)) Et là tout me semble être correct. Je dis me ‘semble’ parce que je ne suis pas habitué à utiliser Excel ni OpenCalc ! Proposition : Puisqu’il y a un problème de TERMINATE avec KGF.DLL, tu veux bien coder dans tes exemples res% = dll_call1("KillProcessByHandle",handle(0)) au lieu de TERMINATE | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |