Open XML pour les fichiers XLSX
Voici la liste des instructions du module YOpenXml utilisable la manipulation de fichiers Microsoft Excel
1 OpenXml_Begin
Prototype : int OpenXml_Begin()
Chargement et initialisation de la dll DhdivaltoOpenXML.dll.
Renvoie :
0 - si pas d'erreur
1 - si la dll n'existe pas
2 - si une fonction n'existe pas, par exemple si la dll est d'une ancienne version
3 - si erreur d'initialisation
2 OpenXml_End
Prototype : int OpenXml_End()
Fin de l'utilisation et libération de la dll DhdivaltoOpenXML.
Renvoie toujours 0
3 OpenXml_FileOpen
Prototype : int OpenXml_FileOpen(fic,creation)
Chargement d'un fichier xlsx.
Paramètres :
1 fic A; nom du fichier xlsx avec son chemin
1 creation X = 0; 0=ne pas créer le fichier s'il n'existe pas ; 1=le créer s'il n'existe pas
Renvoie :
0 - si pas d'erreur
1 - si erreur
4 OpenXml_FileClose
Prototype : int OpenXml_FileClose()
Fermeture du fichier xlsx en cours.
Sauvegarde du fichier. L'écriture des données dans le fichier se fait uniquement par l'appel à cette fonction.
Renvoie :
0 - si pas d'erreur
1 - si erreur
5 OpenXml_ColumnWidth
Prototype : int OpenXml_ColumnWidth(colonne,taille)
Changement de la taille d'une colonne (unité de mesure Excel, 10 par défaut).
Paramètres :
1 colonne N; Numéro de la colonne
1 taille N; Nouvelle taille de la colonne
Renvoie :
0 - si pas d'erreur
6 OpenXml_GotoSheet
Prototype : string OpenXml_GotoSheet(feuille,creation)
Gestion des feuilles de calcul selon la valeur du paramètre création.
Paramètres :
1 feuille A ; Nom de la feuille
1 creation X = 0 ; Type d'opération
Renvoie :
Le nom de la feuille en cours si pas d'erreur
"1" si erreur
Types d'opérations selon les cas suivant :
retour = OpenXml_GotoSheet(" " ,0)
renvoi le nom de la feuille en cours quel que soit la valeur du champ creation.
Si nom de la feuille n'est pas vide alors le champ création indique une opérationretour = OpenXml_GotoSheet("xxx" ,0)
permet d'aller sur la feuille xxx , si xxx n'existe pas alors il y aura une erreurretour = OpenXml_GotoSheet("xxx" ,1)
permet d'aller sur la feuille xxx , si xxx n'existe pas alors on crée une feuille vide
Si le nom de la feuille est vide, la fonction retourne des informations sur la feuille courante (voir OpenXml_CurrentSheet). retour = OpenXml_GotoSheet (" " ,0)
retour = OpenXml_GotoSheet(" " ,2)
liste des feuilles séparer par des ; la liste est toujours clôturée par un dernier caractère point-virguleretour = OpenXml_GotoSheet("xxx" ,3)
duplique la feuille en cours à la fin des feuilles et lui donne le nom xxx
Attention il faut que la feuille en cours à dupliquer soit simple car openxml ne gère pas lLes feuilles complexes avec du graphique etc.retour = OpenXml_GotoSheet("xxx" ,4)
suprime la feuille xxx
Attention il faut que la feuille à supprimer soit simple car openxml ne gère pas les feuilles complexes avec du graphique etc.
Si la feuille à supprimer est la feuille en cours alors on va sur la première feuille, et s'il n'y a plus de feuille alors on crée une feuille vierge et on se positionne dessus.
7 OpenXml_DeleteSheet
Prototype : string OpenXml_DeleteSheet(feuille)
Supprime la feuille dont le nom est indiqué en paramètre.
Attention, il faut que la feuille à supprimer soit « simple » car yopenxml ne gère pas les feuilles « complexes » (contenant du graphique etc.).Si la feuille à supprimer est la feuille en cours, on va sur la première feuille et s'il n'y a plus de feuille, on crée une feuille vierge et on se positionne dessus.
Paramètre :
1 feuille A ; Nom de la feuille
Renvoie :
Le nom de la feuille en cours si pas d'erreur
"1" si erreur
8 OpenXml_CopySheet
Prototype : string OpenXml_CopySheet(feuille)
Duplique la feuille en cours à la fin des feuilles et lui donne le nom passé en paramètre.
Attention, il faut que la feuille à dupliquer soit « simple » car yopenxml ne gère pas les feuilles « complexes » (contenant du graphique etc.).
Paramètre :
1 feuille A ; Nom de la feuille
Renvoie :
Le nom de la feuille en cours si pas d'erreur
"1" si erreur
9 OpenXml_ListSheet
Prototype : string OpenXml_ListSheet
Renvoie la liste des noms de feuille séparés par un ; (point-virgule).La liste est toujours clôturée par un dernier point-virgule.
Renvoie "1" si erreur
10 OpenXml_CurrentSheet
Prototype : string OpenXml_CurrentSheet
Renvoie le nom de la feuille en cours ou "1" si erreur.
11 OpenXml_Read
Prototype : char OpenXml_Read(lig,col)
Lit une cellule et renvoie le texte de cette cellule.La valeur retournée peut être de type String (type S en diva).
Les dates sont toujours au format AAAAMMJJ, quelque soit le format d'affichage des dates.
Les datetimes sont toujours au format AAAAMMJJHHMMSS, quelque soit le format d'affichage des datetimes.
Paramètres :
1 ligN ; Numéro de ligne
1 col N ; Numéro de colonne
Renvoie :
Une chaîne contenant la valeur lue.
12 OpenXml_GetTypeLastRead
Prototype : int OpenXml_GetTypeLastRead()
Renvoie le type du contenu de la cellule qu'on vient de lire :
0 - inconnu, par défaut alpha
1 - alpha
2 - numérique
3 - time <hhmmss>
4 - date <aaaammjj>
5 - datetime <aaaammjjhhmmss>
13 OpenXml_GetSizeSheet
Prototype : int OpenXml_GetSizeSheet()
Calcule la dimension de la feuille écrite. Après l'appel à cette première fonction, on peut appeler les fonctions :
OpenXml_GetStartRow() qui retourne l'indice de la ligne début.
OpenXml_GetEndRow() qui retourne l'indice de la ligne fin.
OpenXml_GetStartColumn() qui retourne l'indice de la colonne début.
OpenXml_GetEndColumn() qui retourne l'indice de la colonne fin.
Ces fonctions permettent de se renseigner sur une feuille existante dont on ne connait pas le nombre de lignes et colonnes. Ainsi, on peut limiter la lecture de la feuille à la plage de cellules réellement existantes.
Exemple de boucle de lecture des cellules d'une feuille :
1 ligdebutL ; Indice de la ligne début
1 ligfinL ; Indice de la ligne fin
1 coldebutL ; Indice de la colonne début
1 colfinL ; Indice de la colonne fin
1 ll L ; curseur lignes
1 cc L ; curseur colonnes
1 valeurLueS ; valeur lue
; Détermination des indices limites de la feuille courante
OpenXml_GetSizeSheet()
Ligdebut = OpenXml_GetStartRow
Ligfin = OpenXml_GetEndRow
Coldebut = OpenXml_GetStartColumn
Colfin = OpenXml_GetEndColumn
; Boucle de lecture
For ll = ligdebut to ligfin
For cc = coldebut to colfin
valeurLue = OpenXml_read(ll, cc)
Next
Next
14 OpenXml_GetMsgError
Prototype : char OpenXml_GetMsgError()
Renvoi le texte de la dernière erreur
15 OpenXml_CreateFont
Prototype : int OpenXml_CreateFont(gras, taille, indexcouleur, nom, italique, soulignee, barree)
Création d'une police qui pourra être utilisée lors de l'appel à la fonction OpenXml_WrteFormat.
Paramètres :
1 gras X = 0 ; 1=gras
1 taille X = 0 ; 0=taille par défaut ; sinon mettre une valeur entre 8 et 72
1 indexcouleur X = 0 ; 0=couleur des caractères par défaut
1 nom 32 = " " ; Nom de la police ; espace indique la police pas défaut d'Excel
1 italique X = 0 ; 1=italique
1 soulignee X = 0 ; 1=soulignée
1 barree X = 0 ; 1=barrée
Une taille à 0 demande de prendre la hauteur par défaut de la police des cellules.
Une couleur à 0 demande de prendre la couleur des caractères par défaut (normalement le noir).
<Nom> à espace demande de prendre la police par défaut de Excel pour les cellules (en général Tahoma).
Renvoie :
L'indice de la police, à préciser lors de l'appel à la fonction OpenXml_WrteFormat.
Exemples :
1polx ; indice de la police
pol = OpenXml_CreateFont(1) ; mettre la police ne gras
pol = OpenXml_CreateFont(1,16) ; mettre la police en gras et en taille 16
pol = OpenXml_CreateFont(0,16) ; ne pas mettre la police en gras en taille 16
pol = OpenXml_CreateFont(0,0,24) ; ne pas mettre la police en gras en taille par défaut et les
; caractères en couleur 24 (bleu ciel)
pol = OpenXml_CreateFont(0, 0, 0, "Tahoma", 0, 0 ) ; police Tahoma, taille par défaut
Format des polices et des couleurs de fond des cellules
Les couleurs de fond :
Les couleurs de fond des cellules vont de 1 à 56, ce sont les couleurs standards d'Excel.
La couleur 0 indique 'ne pas changer la couleur si la cellule existe' sinon la couleur du fond de la nouvelle cellule sera la couleur de fond par défaut des cellules Excel ( ou de la colonne si la colonne a une couleur prédéfinie)
Liste des couleurs : nota la couleur 24 est souvent utilisé pour mettre en relief une cellule.
Les Polices :
Pour pouvoir modifier la police par défaut qu'aura le texte de la cellule, il faut créer une description de la police dans les styles du fichier xlsx .
Il faut appeler la fonction OpenXml_CreateFont pour créer la police et elle renvoi un indice qui doit être indiqué dans la fonction OpenXml_WriteFormat
Attention cet indice n'est valide que dans le fichier xlsx en cours, c'est local au fichier xlsx.
15 OpenXml_WriteFormat
Proto : int OpenXml_WriteFormat(lig, col, valeur, form, decim, multi, zero, indexcouleurfond, p1)
Ecrit un texte ou une valeur dans une cellule avec un format.
L'écriture se fait uniquement en mémoire.
Attention, cette fonction ne traite pas les formules et ne fait pas le recalcul des cellules. Pour que le recalcul du tableau se fasse et soit enregistré, il faut charger le fichier xlsx dans Excel et sauvegarder ensuite le résultat.
Lorsqu'on modifie le fichier xlsx, on positionne une information pour indiquer à Excel que les calculs ne sont pas à jour et qu'il lui faudra recalculer les formules lors de la prochaine ouverture du classeur.
Paramètres :
1 lig 6,0 = 0 Numéro de la ligne
1 col 6,0 = 0 Numéro de la colonne
1 valeurU Contenu de la cellule
1 form A = " " Format de la valeur "Texte", "Numeric", "Date",
"DateHeure", "Heure", "HeureMinuteSeconde",
"Multichoix","Duree"
1 decimN = 0 Nombre de décimales si format "Numeric"
1 multi A = " " Liste des multi-choix (séparer les choix par le caractère |)
1 zero B = FalseAfficher les zéros ; non affichés par défaut,
si la valeur est nulle, on affiche le texte à espace
1 indexcouleurfond x = 0 Couleur de fond 0 = ne pas changer la couleur de fond, sinon
c'est une valeur de 1 à 56 (cf. fonction OpenXml_CreateFont)
1 p1 x = 0 Numéro de police 0 = police par défaut, sinon mettre
l'indice renvoyé par la fonction OpenXml_CreateFont
Renvoie :
0 si pas d'erreur
Les formats possibles pour le paramètre <form> sont :
"Texte" valeur représente un texte et le format d'affichage par défaut est "@"
"Numeric" valeur numérique, le champ decim doit contenir le nombre de 0
que l'on veut voir après la virgule"Date" valeur doit être au format AAAAMMJJ
"DateHeure" valeur doit être au format AAAAMMJJHHMMSS
"Heure" valeur doit être au format HHMM [SS], a zone secondes [SS] n'est pas lu,
on peut la mettre ou pas, on fait comme si c'était 00"HeureMinuteSeconde" valeur doit être au format HHMMSS
"Duree" valeur doit contenir un nombre en secondes
" MultiChoix " valeur comtiens le numero de choix et le champ ulti doit contenir la liste
Des choix possibles séparés par le caractère | le résultat est de type texte
Exemples :
OpenXml_WriteFormat( lig, col, "10,126" , "Numeric", 2)
OpenXml_WriteFormat( lig, col, "10,1239" , "Numeric", 3)
OpenXml_WriteFormat( lig, col, "20140926", "Date" )
OpenXml_WriteFormat( lig, col, "Simple texte" , "Texte")
OpenXml_WriteFormat( lig, col, "201409261030" , "DateHeure")
OpenXml_WriteFormat( lig, col, "103000", "Heure")
OpenXml_WriteFormat( lig, col, "103000", "HeureMinuteSeconde")
OpenXml_WriteFormat( lig, col, "70","Duree") ;1 minutes et 10 secondes
OpenXml_WriteFormat( lig, col, 2, " MultiChoix ",0 , "Monsieur|Madame" )
1 ppgras x = 0
1 pptitre x = 0
st = OpenXml_FileOpen(fic,0);ouverture du fichier
;ajout de type de modification de police et/ou de police dans les styles du fichier 'fic'
ppgras = OpenXml_CreateFont(1) ;juste gras
pptitre = OpenXml_CreateFont(1,16 ) ;gras et grande taille
;maintenant on peut écrire les cellules
OpenXml_WriteFormat( lig, col, "10,126" , "Numeric", 2," ",false,0,ppgras) ;gras pas de couleur
OpenXml_WriteFormat( lig, col, "10,1239" , "Numeric", 2," ",false,3,ppgras);gras et couleur 3 (rouge)
OpenXml_WriteFormat( lig, col, "20140926", "Date" ," ",false,24,pptitre);grand titre et couleur 24 (bleu ciel)
OpenXml_WriteFormat( lig, col, "Simple texte" , "Texte"," ",false,0,0) ;rien
OpenXml_WriteFormat( lig, col, "201409261030" , "DateHeure"," ",false,0,0);rien
OpenXml_WriteFormat( lig, col, "103000", "Heure"," ",false,24,pptitre) ;grand titre et couleur 24
OpenXml_WriteFormat( lig, col, "103000", "HeureMinuteSeconde"," ",false,24)
OpenXml_WriteFormat( lig, col, "70", "Duree") ;1 minutes et 10 secondes
;fermeture du fichier
OpenXml_Close
ppgras = 0 ;on vient de fermer le fichier donc ppgras et pptitre n'existe plus
pptitre = 0;car ce sont des informations locales au fichier excel
16 OpenXml_ReadCellByName
Lecture d'une cellule nommée unique par son nom.
Prototype : char OpenXml_ReadCellByName(nom)
Paramètres :
1 nom A ; nom de la cellule a lire,
; si c'est une plage, ca renvoi la valeur que de la premiere cellule
Renvoie :
Une chaîne contenant la valeur lue ou espace si le nom n'existe pas
Exemple :
1Valeur S
Valeur = OpenXml_ReadCellByName("test") ; Lecture de la cellule nommée « test »
17 OpenXml_AppendNameCell
Permet la création d'une cellule ou d'une plage de cellules nommée.
Prototype : int OpenXml_AppendNameCell(nomcellule , nomfeuille , lignedebut , lignefin , coldebut , colfin)
Paramètres :
1 nomcellule A; Nom que l'on va donner à la plage de cellule
1 nomfeuille A ; Nom de la feuille (onglet)
1 lignedebut N ; Indice ligne début de la plage à nommer
1 lignefin N ; Indice ligne fin de la plage à nommer
1 coldebut N ; Indice colonne début de la plage à nommer
1 colfin N ; Indice colonne fin de la plage à nommer
Renvoie :
1 si ok
Exemple :
1 nomcellule32 = "TEST" ; Nom que l'on va donner à la plage de cellules
1 nomfeuille32 = "Feuil1" ; Nom de la feuille (onglet)
1 lignedebut6,0 = 10 ; Indice ligne début de la plage à nommer
1 lignefin6,0 = 15 ; Indice ligne fin de la plage à nommer
1 coldebut 6,0 = 1 ; Indice colonne début de la plage à nommer
1 colfin 6,0 = 1 ; Indice colonne fin de la plage à nommer
1 Ok L ; retour de la fonction
Ok = OpenXml_AppendNameCell(nomcellule, nomfeuille, lignedebut, lignefin, coldebut, colfin)
If ( ok )
; La plage a bien été nommée
endif
Résultat sur un document vierge :
18 OpenXml_ReadNameCell
Recherche une plage de cellules nommée et renseigne les paramètres passés par adresse : nomfeuille, lignedebut, lignefin, coldebut et colfin.
Prototype : int OpenXml_ReadNameCell(nomcellule, &nomfeuille, &lignedebut, &lignefin, &coldebut, &colfin)
Paramètres :
1 nomcellule A; Nom de la plage de cellule à rechercher
1 nomfeuille 32; renseignée par la fonction : nom de la feuille contenant la plage nommée
1 lignedebut6,0 ; renseignée par la fonction : indice début ligne pour la plage nommée
1 lignefin6,0 ; renseignée par la fonction : indice fin ligne pour la plage nommée
1 coldebut6,0 ; renseignée par la fonction : indice début colonne pour la plage nommée
1 colfin 6,0 ; renseignée par la fonction : indice fin colonne pour la plage nommée
Renvoie :
1 si le nom existe dans la table des noms, ou bien renvoi 0 si ce nom n'existe pas
Renseigne les paramètres passés par adresse : nomfeuille, lignedebut, lignefin, coldebut et colfin.
Exemple :
1 nomcellule32 = "TEST" ; Nom de la plage de cellule à rechercher
1 nomfeuille32 ; renseignée par la fonction : nom de la feuille contenant la plage nommée
1 lignedebut6,0 ; renseignée par la fonction : indice début ligne pour la plage nommée
1 lignefin6,0 ; renseignée par la fonction : indice fin ligne pour la plage nommée
1 coldebut6,0 ; renseignée par la fonction : indice début colonne pour la plage nommée
1 colfin 6,0 ; renseignée par la fonction : indice fin colonne pour la plage nommée
1 Ok L ; Valeur de retour de la fonction
Ok = OpenXml_ReadNameCelll(nomcellule, nomfeuille, lignedebut, lignefin, coldebut, colfin)
If ( ok )
Display nomfeuille
Display lignedebut
Display lignefin
Display colonnedebut
Display colonnefin
endif
19 OpenXml_ReadCountNameCell
Retourne le nombre d'entrées dans la table des noms du document.
Prototype : int OpenXml_ReadCountNameCell
Paramètres :
Renvoie :
Renvoi le nombre de nom dans la table des cellules nommées
Exemple
1 idx 6,0
idx = OpenXml_ReadCountNameCell() ; Retourne le nombre de plages/cellules nommées du document
20 OpenXml_ReadNameCellIdx
Permet de lire la table des cellules nommées, selon l'indice de la table à partir de 1 jusqu'a OpenXml_ReadCountNameCell.
renseigne les paramètres passés par adresse : nomfeuille, lignedebut, lignefin, coldebut et colfin.
Prototype : int OpenXml_ReadNameCellIdx(idx,&nomcellule,&nomfeuille,&lignedebut,&lignefin,&coldebut,&colfin)
Paramètres :
1 idx N
1 nomcellule A
1 nomfeuille A
1 lignedebut N
1 lignefin N
1 coldebut N
1 colfin N
Renvoie :
Renvoi 1 si ok
Renseigne les paramètres passés par adresse : nomfeuille, lignedebut, lignefin, coldebut et colfin.
Exemple :
; Lecture des caractéristique des plage de cellules nommées
1 Nb L ; Nombre de plage de cellules nommées
1 idx L ; indice de la plage nommée
1 Ok L ; Valeur de retour de la fonction
1 nomfeuille32 ; renseignée par la fonction : nom de la feuille contenant la plage nommée
1 lignedebut6,0 ; renseignée par la fonction : indice début ligne pour la plage nommée
1 lignefin6,0 ; renseignée par la fonction : indice fin ligne pour la plage nommée
1 coldebut6,0 ; renseignée par la fonction : indice début colonne pour la plage nommée
1 colfin 6,0 ; renseignée par la fonction : indice fin colonne pour la plage nommée
nb = OpenXml_ReadCountNameCell
if nb <> 0
; Boucle sur les plages nommées
for idx = 1 to nb
; Lecture des caractèristiques de chaque cellule
ok = OpenXml_ReadNameCellIdx(idx, nomcellule, nomfeuille, lignedebut, lignefin, coldebut, colfin)
if (ok)
; Affichage des informations lues
display nomcellule
display nomfeuille
display lignedebut
display lignefin
display coldebut
display colfin
endif
next
endif
21 OpenXml_ReadLine
Prototype : int OpenXml_ReadLine()
La fonction diva OpenXml_ReadLine permet une lecture d’une ligne entière.
Elle commence toujours par la colonne 1
Les cellules qui n’existent pas sont renvoyées aussi avec un texte vide
Renvoie :
une chaîne HMP contenant toutes les colonnes de la ligne au format <c>valeur colonne1<c>valeur colonne2 etc jusqu’à la dernière cellule existante sur cette ligne
Exemple
Si on a le tableau excel
On aura <c><c>cellule B<c><c>cellule D
Le premier <c> avec rien , indique la colonne 1
Le deuxième <c> avec « cellule B « indique la colonne 2
Etc
Exemple d’utilisation
- 1 1 OpenXml_Begin
- 2 2 OpenXml_End
- 3 3 OpenXml_FileOpen
- 4 4 OpenXml_FileClose
- 5 5 OpenXml_ColumnWidth
- 6 6 OpenXml_GotoSheet
- 7 7 OpenXml_DeleteSheet
- 8 8 OpenXml_CopySheet
- 9 9 OpenXml_ListSheet
- 10 10 OpenXml_CurrentSheet
- 11 11 OpenXml_Read
- 12 12 OpenXml_GetTypeLastRead
- 13 13 OpenXml_GetSizeSheet
- 14 14 OpenXml_GetMsgError
- 15 15 OpenXml_CreateFont
- 16 15 OpenXml_WriteFormat
- 17 16 OpenXml_ReadCellByName
- 18 17 OpenXml_AppendNameCell
- 19 18 OpenXml_ReadNameCell
- 20 19 OpenXml_ReadCountNameCell
- 21 20 OpenXml_ReadNameCellIdx
- 22 21 OpenXml_ReadLine