Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Faire des Etats rapides compatibles avec Microsoft Excel 2003

Date de publication : Mars 2006

Par Yvan Ayaay (4D Inc.)
 

Les Etats Rapides sont un des outils de 4D permettant de générer des rapports. Les rapports générés peuvent être au format HTML. Le modèle utilisé pour générer ce type de sortie contient des balises qui peuvent aussi être utilisées pour générer un fichier de type XML. Avec une sortie XML, vous pouvez aisément importer dans toutes applications qui supporte le XML, notamment Excel. Dans cette note technique, nous illustrons comment générer une sortie XML avec l'Editeur d'Etats Rapides qui sera compatible avec Microsoft Excel 2003 (sous Windows uniquement).

Introduction
Sortie de l'éditeur d'Etats Rapides : fichier HTML
Les balises du modèle HTML
Générer une sortie d'Etats Rapides au format XML
Générer un fichier XML simple
Générer un classeur XML
Base exemple
Conclusion


Introduction

Les types de sorties générés avec l'Editeur d'Etats Rapides peuvent être imprimante, fichier texte, fichier HTML, 4D View ou 4D Chart. Lorsque l'on choisit un type de destination HTML, un modèle est utilisé pour construire l'état au format HTML. Ce modèle utilise une série de balises qui met en place les données de façon à obtenir un état proche de l'original ou pour adapter un état de sortie personnalisée HTML. Les balises utilisées dans ce modèle peuvent être manipulées non seulement pour faire du HTML mais tout aussi bien pour générer du XML. Microsoft Excel 2300 supporte le XML. On peut analyser un xml personnalisé qui suit un certain schéma et on peut aussi ouvrir un classeur XML, qui possède son propre format XML.

Dans cette note technique, la fonctionnalité de l'éditeur d'Etats Rapides qui permet une destination en fichier HTML sera d'abord abordée. Le modèle HTML utilisé et quelques fonctionnalités des balises du modèle seront décrites. Ensuite, nous montrerons comment ces balises peuvent être utilisées pour générer un état XML avec les commandes de l'éditeur d'Etats Rapides. Deux formats peuvent être compatible avec Microsoft Excel 2003. Un de ces formats est un format XML personnalisé et l'autre est un format XML classeur (aussi connu sous le nom de SpreadsheetML) qui est un des formats XML spécifique à Excel.


Sortie de l'éditeur d'Etats Rapides : fichier HTML

Un rapport peut être généré en utilisant l'Editeur d'Etats Rapides ou par programmation en utilisant les commandes de l'éditeur d'états. Les destinations de sortie peuvent être une imprimante, un fichier texte, un fichier HTML, 4D View ou 4D Chart. Lorsque le type de sortie est un fichier HTML, un modèle HTML qui contient des balises est utilisé pour construire un fichier HTML. Un modèle HTML par défaut est utilisé mais un modèle personnalisé peut être utilisé pour générer un fichier HTML personnalisé.

Ci-dessous un exemple de code qui construit par programmation un état rapide et génère un fichier HTML :
code 4D

C_TEXTE(MyTemplate;MyValTex;$path)
C_ENTIER LONG(QRArea)
$path:="monEtat.html"
QRArea:=QR Creer zone hors ecran  ` création d'une zone hors-écran de l'éditeur d'Etats Rapides
QR FIXER TABLE ETAT(QRArea;Table(->[ClientsInfos]))  `La table [ClientsInofs] est fixée comme
`table par défaut
QR INSERER COLONNE(QRArea;1;->[ClientsInfos]Prénom)  `On insère la colonne Prénom en 1ère colonne
QR INSERER COLONNE(QRArea;2;->[ClientsInfos]Nom)  `Nom en 2ème colonne
QR INSERER COLONNE(QRArea;3;->[ClientsInfos]Société)  `Société en 3ème colonne
QR INSERER COLONNE(QRArea;4;->[ClientsInfos]Années)  `Années en 4ème colonne
QR INSERER COLONNE(QRArea;5;->[ClientsInfos]Statut)  `Statut en 5ème colonne
TABLEAU REEL($aColumns;1)
$aColumns{1}:=1  `Tableau pour choisir la colonne à trier
TABLEAU REEL($aOrder;1)
$aOrder{1}:=-1
  `Tableau pour fixer l'ordre de tri : -1 pour un tri descendant, 1 pour un tri ascendant.
QR FIXER TRIS(QRArea;$aColumns;$aOrder)
  `on trie sur la première colonne (prénom) dans un ordre descendant.
QR FIXER DESTINATION(QRArea;qr fichier HTML ;$path)  ` On choisit un fichier HTML
TOUT SELECTIONNER([ClientsInfos])
QR EXECUTER(QRArea)  `Exécution de l'état
QR SUPPRIMER ZONE HORS ECRAN(QRArea)  ` Suppression de la zone hors-écran

Le fichier HTML généré ressemblera à ceci :


Le code ci-dessous utilise le modèle HTML par défaut. La commande QR FIXER MODELE HTML peut être utilisée pour mettre en place un modèle HTML personnalisé qui peut être utilisé générant un état rapide. Le modèle personnalisé stocké dans une variable texte passée comme paramètre à la commande QR FIXER MODELE HTML utilise une série de balises qui manipulent les données afin de construire un formulaire personnalisé HTML. De plus, ces balises peuvent être manipulées pour générer un format XML.


Les balises du modèle HTML

Voici ci-dessous quelques balises utilisées dans l'exemple plus loin, et leur description :

<!--#4DQRheader--> ... <!--/#4DQRheader-->
Le contenu inclut entre ces deux balises vient des titres de colonnes.

<!--#4DQRrow--> ... <!--/#4DQRrow-->
Les informations insérées entre ces balises seront répétées pour chaque ligne de données (détail et sous-total compris).

<!--#4DQRcol--> ... <!--/#4DQRcol-->
Les informations insérées entre ces balises seront répétées pour chaque colonne de données. Le tri de la colonne est identique à celui de l'état. Avec cette balise, un numéro de colonne peut être spécifié : ... pour insérer les données à partir d'une certaine colonne. Par exemple ... insérera les données de la deuxième colonne.

<!--#4DQRdata-->
Cette balise sera remplacée par les données de la cellule courante.

Pour illustrer la façon d'utiliser ces balises, nous allons utiliser une table simple comme ci-dessous :

ID Nom Ville
111 John Smith Seattle
112 Ben Gordon San Jose

L'ID, le nom et la ville sont les titres de colonnes du rapport. Pour retrouver ces titres, les balises peuvent être utilisées comme ci-dessous :

<HTML>
	<!--#4DQRheader-->
		<!--#4DQRcol-->
			<!--#4DQRdata-->
		<!--/#4DQRcol-->
	<!--/"4DQRheader-->
</HTML>
Le formulaire de sortie HTML pour ces balises devra ressembler à ceci :

112
Ben Gordon
San Jose

111
John Smith
Seattle

Les balises du modèle HTML peuvent aussi être manipulées pour générer un format XML. Le format peut alors aisément être importé dans Excel (2003). La prochaine section traite de ce sujet.


Générer une sortie d'Etats Rapides au format XML

Microsoft Excel (tests faits en utilisant Office Excel 2003) fournissent deux sorties de fonctionnalités XML : cela permet de construire un classeur à partir d'un fichier en XML basique ou permet d'ouvrir un classeur sauvegardé au propre format XML d'Excel.

Dans cette section, nous illustrons la génération d'un modèle qui permet de construire du XML basique pouvant être analysé par Excel, et la construction d'un modèle qui créera un classeur XML ou SpreadsheetML qui peut être ouvert automatiquement par Excel.


Générer un fichier XML simple

Microsoft Excel (2003) peut ouvrir un fichier XML conforme à un schéma et importer des données de celui-ci. XML (eXtensible Markup Language) est un language standard d'échange de données. Beaucoup d'applications autres que Microsoft Excel peuvent supporter ce format. Un état de ce type peut être facilement utilisé pour exporter des données vers Excel. (note : Microsoft Excel 2003 supporte un XML personnalisé). Vérifiez la version d'Excel que vous utilisez pour voir si elle est compatible avec le XML basique.

L'ensemble des balises HTML décrit dans la section ci-dessous peuvent être utilisé dans un modèle HTML personnalisé, pour générer un état rapide structuré au format XML. Le process pour générer un état rapide par programmation sera le même en utilisant le fichier de destination type HTML. Le formulaire de sortie dépend de la strucutre du modèle utilisé. Ainsi, la majeure partie de la personnalisation sera faite dans le modèle pour générer un fichier XML bien formé.

Un rapport en XML pour la table [Client] avec les enregistrements comme ci-dessous sera généré avec l'Editeur d'Etats Rapides pour montrer la façon de procéder.

ID_Client Nom Ville
111 John Smith Seattle
112 Ben Gordon San Jose

Voici un exemple de la représentation XML :

<?xml version="1.0" encoding="ISO-8859-1" ?>
<Client>
   <Client>
      <IDClient>112</IDClient>
      <Nom>Ben Gordon</Nom>
      <Ville>San Jose</Ville>
   </Client>
   <Client>
   <Client>
      <IDClient>111</IDClient>
      <Nom>John Smith</Nom>
      <Ville>Seattle</Ville>
   </Client>
</Client>

Pour générer un état rapide sur les enregistrements de la table [Client], voici la méthode-projet ExempleEtatRapide :
code 4D : méthode ExempleEtatRapide

 `Méthode projet :  ExempleEtatRapide
 `Description : Cette méthode montre comment générer un état rapide au format XML

C_TEXTE(MyTemplate;MyValText;$path)
C_ENTIER LONG(QRArea)
$path:="XMbasic.xml"
QRArea:=QR Creer zone hors ecran  ` création de la zone hors-écran
QR FIXER TABLE ETAT(QRArea;Table(->[Client]))  `la table [Client] est la table courante
QR INSERER COLONNE(QRArea;1;->[Client]IDClient)  ` Insertion du champ IDClient en 1ère colonne
QR INSERER COLONNE(QRArea;2;->[Client]Nom)  ` Insertion du Nom en deuxième colonne
QR INSERER COLONNE(QRArea;3;->[Client]Ville)  ` Insertion de la ville en 3ème colonne
TABLEAU REEL($aColumns;1)
$aColumns{1}:=1  `Tableau des colonnes à trier
TABLEAU REEL($aOrder;1)
$aOrder{1}:=-1  ` Tableau du sens des tri. -1 pour un tri descendant, 1 pour un tri ascendant
QR FIXER TRIS(QRArea;$aColumns;$aOrder)  `  on met en place un tri descendant sur la première colonne
QR FIXER DESTINATION(QRArea;qr fichier HTML ;$path)  ` on choisit comme destination un fichier HTML
MyTemplate:=Construct_XML_Modele(QRArea)  ` on personnalise le modèle HTML 
QR FIXER MODELE HTML(QRArea;MyTemplate)
QR EXECUTER(QRArea)  `on exécute l'état rapide
QR SUPPRIMER ZONE HORS ECRAN(QRArea)  ` on supprime la zone hors-écran
Comme vous pouvez le constatez dans le code ci-dessus, un état rapide est créé par programmation avec comme destination un fichier HTML. Un modèle personnalisé est mis en place en utilisant la commande QR FIXER MODELE HTML. Le texte de la variable MyTemplate contient le modèle personnalisé pour une sortie en fichier HTML. La méthode Construct_XML_Modele ci-dessous montre comment construire et retourné le modèle pour la zone de l'état rapide passée en paramètre :
code 4D : méthode Construct_XML_Modele

  `Méthode projet : Construct_XML_Modele
  `Description : cette méthode construit un modèle HTML qui générer un fichier de sortie structuré XML
  `elle prend la zone de l'état rapide en paramètre et retourne le modèle personnalisé sous format texte

C_TEXTE($0;$tempText)
C_ENTIER LONG($1;$QRarea;curPos)
C_ENTIER LONG($numCols;$tableNum;$i;$hide;$rep;$size;$numFields;$fieldNum)
C_TEXTE($ColName;$obj;$format;$title;$newLine;$fieldobj)

$QRarea:=$1  `zone Etats rapides
$numCols:=QR Nombre de colonnes($QRarea)  ` on compte le nombre de colonne.
$tableNum:=QR Lire table etat($QRarea)  `on récupère le numéro de la table utilisé pour l'état. 

$newLine:=Caractere(13)+Caractere(10)
$tempText:=""  ` variable texte du modèle
$tempText:=$tempText+"<?xml Version=\"1.0\" Encoding=\"<!--#4DQRCharSet-->\"?>"
  `use table name as the root element
$tempText:=$tempText+$newLine+"<"+Remplacer chaine(Nom de la table($tableNum);" ";"_")+">"
$tempText:=$tempText+Caractere(13)+"     <!--#4DQRRow-->"
  `use table name as tag for each row. 
$tempText:=$tempText+Caractere(13)+"    <"+Remplacer chaine(Nom de la table($tableNum);" ";"_")+">"

  `en se basant sur le numéro de colonne, on place son nom en balises
  `et on insert les données entre chaque balise
  `On répète ceci pour chaque colonne
Boucle ($i;1;$numCols)
	  `on récupère les informations sur la colonne 
	QR LIRE INFO COLONNE($QRarea;$i;$title;$obj;$hide;$size;$rep;$format)
	$ColName:=$title
	$tempText:=$tempText+Caractere(13)+"         <!--#4DQRCol;"+Chaine($i)+"-->"
	  `insertion du nom de colonne en tant que balise
	$tempText:=$tempText+Caractere(13)+"         <"+Remplacer chaine($ColName;" ";"_")+">"
	  `insertion des données
	$tempText:=$tempText+Caractere(13)+"                 <!--#4DQRData-->"
	$tempText:=$tempText+Caractere(13)+"         </"+Remplacer chaine($ColName;" ";"_")+">"
	$tempText:=$tempText+Caractere(13)+"         <!--/#4DQRCol;"+Chaine($i)+"-->"
Fin de boucle 
  `insertion des balises fermantes. 
$tempText:=$tempText+Caractere(13)+"    </"+Remplacer chaine(Nom de la table($tableNum);" ";"_")+">"
$tempText:=$tempText+Caractere(13)+"     <!--/#4DQRRow-->"
$tempText:=$tempText+$newLine+"</"+Remplacer chaine(Nom de la table($tableNum);" ";"_")+">"

$0:=$tempText

Les noms des colonnes sont utilisés en tant que balise et sont répétés pour chaque ligne de données.

Dans la méthode Construct_XML_Modele, le code XML est d'abord inséré dans la variable texte du modèle. Puis, le nom de la table est utilisé comme balise en élément racine principal. Ainsi chaque ligne est insérée dans les éléments enfants, les noms des colonnes et leurs données sont placés dans les balises <!--#4DQRrow--> ... <!--/#4DQRrow--> qui sera répété par ligne. Dans la méthode indiquée, le nombre de colonnes dans la zone d'états rapides est récupéré pour avoir le nom de la colonne qui est utilisé comme balises. Ceci est fait dans une boucle pour chaque colonne. Dans les balises de colonne, la donnée pour chaque colonne spécifique est retrouvé en utilisant les balises <!--#4DQRRcol;n--> ... <!--/#4DQRcol;n--> et <!--#4DQRdata-->. Chaque balise est associée par paire à une balise fermante. Les contenus entre <!--#4DQRrow--> et <!--/#4DQRrow--> sont répétés à chaque ligne.

Quand la méthode ExempleEtatRapide est exécutée, un fichier XML est généré. Quand ce fichier est ouvert avec Excel, un dialogue comme ci-dessous apparaît. C'est habituellement le cas lorsque l'on ouvre un document XML basique. Ce dialogue ne doit pas apparaître lorsque l'on ouvre un classeur XML.


Lorsque vous choisissez "En tant que liste XML", les données sont importées comme ci-dessous :


Générer un classeur XML

Apparue avec Microsoft Excel XP, une nouvelle fonctionnalité XML a été introduite dans Excel avec l'utilisation de SpreadsheetML. Il s'agit du propre format XML d'Excel. Il permet à Excel d'ouvrir ce type de document automatiquement comme s'il ouvrait un fichier .xls.

Aucune analyse, comme vu auparavant en XML basique, n'est faite lorsque ce type de document est ouvert.

La table [Client] avec ses données comme montrées ci-dessous sera à nouveau utilisée pour illustrer comment générer ce type de format XML.

ID_Client Nom Ville
111 John Smith Seattle
112 Ben Gordon San Jose

Ci-dessous voici un exemple de classeur XML pour les données de la table [Client] :

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>IVAN</Author>
  <LastAuthor>Yvan Ayaay</LastAuthor>
  <Created>2006-02-20T06:13:35Z</Created>
  <Company>NONE</Company>
  <Version>11.5606</Version>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <DownloadComponents/>
  <LocationOfComponents HRef="file:///D:\F__\"/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>9210</WindowHeight>
  <WindowWidth>15195</WindowWidth>
  <WindowTopX>0</WindowTopX>
  <WindowTopY>30</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
<Worksheet ss:Name="Client">
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="3" x:FullColumns="1" x:FullRows="1">
<Row>
<Cell><Data ss:Type="String">IDClient</Data></Cell>
<Cell><Data ss:Type="String">Nom</Data></Cell>
<Cell><Data ss:Type="String">Ville</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">112</Data></Cell>
<Cell><Data ss:Type="String">Ben Gordon</Data></Cell>
<Cell><Data ss:Type="String">San Jose</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">111</Data></Cell>
<Cell><Data ss:Type="String">John Smith</Data></Cell>
<Cell><Data ss:Type="String">Seattle</Data></Cell>
</Row>
</Table>
<WorksheetOptions>
<Selected/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Comme vous pouvez le voir, le classeur commence avec une déclaration XML et les informations qui suivent concernent les métadonnées à propos du document. Les balises du modèle HTML seront manipulées pour insérer dynamiquement l'information telle qu'elle apparaîtra dans les balises du classeur.

Pour générer une sortie XML classeur, la méthode projet ExempleEtatRapide2 est quasiment identique à la précédente, mais au lieu d'appeler la méthode Construct_XML_Modele, on appelle la méthode Construct_XML_Classeur :
code 4D

...
QR FIXER DESTINATION(QRArea;qr fichier HTML ;$path)  ` on fixe la destination vers un fichier HTML
MyTemplate:=Construct_XML_Classeur (QRArea)  ` personnalisation du modèle HTML
QR FIXER MODELE HTML(QRArea;MyTemplate)
...

La méthode projet Construct_XML_Classeur, comme montrée ci-dessous, crée un modèle HTML qui construit une sortie feuille de calcul Excel :
code 4D : méthode Construct_XML_classeur

  `Méthode projet : Construct_XML_classeur
  `Description : 
  `Cette méthode crée un modèle qui construit une sortie classeur XML.
  `Le modèle est retournée en tant que variable texte.

C_TEXTE($0;$tempText)
C_ENTIER LONG($1;$QRarea;curPos;$numRecords)
C_ENTIER LONG($numCols;$numRows;$tableNum;$i;$hide;$rep;$size;$numFields;$fieldNum)
C_TEXTE($ColName;$obj;$format;$title;$newLine;$fieldobj;mytype;$metadataTemplate)
C_POINTEUR($tablePtr)

$QRarea:=$1
$numCols:=QR Nombre de colonnes($QRarea)  ` on compte les colonnes dans l'Etat Rapide
$tableNum:=QR Lire table etat($QRarea)  `on récupère le numéro de la table courante
$numFields:=Nombre de champs($tableNum)  `on compte le nombre de champs dans la table
$tablePtr:=Table($tableNum)
$numRecords:=Enregistrements trouves($tablePtr->)  `on récupère le nombre d'enregistrements dans la sélection

TABLEAU TEXTE(asFields;Nombre de champs($tableNum))
Boucle ($vlField;1;Taille tableau(asFields))  ` on récupère tous les noms des champs dans un tableau
	asFields{$vlField}:=Nom du champ($tableNum;$vlField)
Fin de boucle 
  `on insère dans le modèle une variable texte avec la balise <Worksheet>
$tempText:="<Worksheet ss:Name=\""+Remplacer chaine(Nom de la table($tableNum);" ";"_")+"\">"
  `on déclare le nombre de colonne contenant les données dans la feuille de calcul
$tempText:=$tempText+Caractere(13)+" <Table ss:ExpandedColumnCount=\""
      +Chaine($numCols)+"\" ss:ExpandedRowCount=\""+Chaine($numRecords+1)
      +"\" x:FullColumns=\"1\" x:FullRows=\"1\">"
  `on insère les titres des colonnes
$tempText:=$tempText+Caractere(13)+"<!--#4DQRHeader--><Row><!--#4DQRCol-->
      <Cell><Data ss:Type=\"String\"><!--#4DQRData-"+"-></Data></Cell><!--/#4DQRCol-->
      </Row><!--/#4DQRHeader-->"
$tempText:=$tempText+Caractere(13)+"<!--#4DQRRow--><Row>"
  `on insère les données pour chaque ligne 
Boucle ($i;1;$numCols)
          ` récupère des informations sur la colonne
	QR LIRE INFO COLONNE($QRarea;$i;$title;$obj;$hide;$size;$rep;$format) 
	curPos:=Position("]";$obj)
	$fieldobj:=Sous chaine($obj;curPos+1)  `$fieldobj contient le nom du champ
	$fieldNum:=Chercher dans tableau(asFields;$fieldobj)  `cherche le numéro du champ
	LIRE PROPRIETES CHAMP($tableNum;$fieldNum;$fieldType)  `détermine le type de champ
	mytype:=GetType ($fieldType)  `cette fonction retourne le type de la donnée
	$ColName:=$title  ` titre de la colonne
	$tempText:=$tempText+Caractere(13)+"<!--#4DQRCol;"+Chaine($i)+"-->"  ` contenu de la colonne 
           ` déclaration du type de données
	$tempText:=$tempText+Caractere(13)+"<Cell><Data ss:Type=\""+mytype+"\">"  
	$tempText:=$tempText+Caractere(13)+"<!--#4DQRData-->"  ` insertion des données
           `insertion des balises fermantes
	$tempText:=$tempText+Caractere(13)+"</Data></Cell> <!--/#4DQRCol;"+Chaine($i)+"-->" 
Fin de boucle 
  `insertion des balises fermantes pour la fin du texte du modèle de tableur
$tempText:=$tempText+Caractere(13)+"</Row><!--/#4DQRRow-->"
$tempText:=$tempText+Caractere(13)+"</Table>"
$tempText:=$tempText+Caractere(13)+"<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"
$tempText:=$tempText+Caractere(13)+"<Selected/>"
$tempText:=$tempText+Caractere(13)+"<ProtectObjects>False</ProtectObjects>"
$tempText:=$tempText+Caractere(13)+"<ProtectScenarios>False</ProtectScenarios>"
$tempText:=$tempText+Caractere(13)+"</WorksheetOptions>"
$tempText:=$tempText+Caractere(13)+"</Worksheet>"
$tempText:=$tempText+Caractere(13)+"</Workbook>"
 `ReadTemp lit un fichier qui contient une partie du modèle qui deviendra le début du modèle de tableur 
$metadataTemplate:=ReadTemp ("XMLtemp2.txt") 
$0:=$metadataTemplate+$tempText  ` concaténation les début et fin de texte pour obtenir notre modèle
Dans la méthode Construct_XML_Classeur, le contenu entre les éléments XML <WorkSheet> sont dynamiquement créés. La portion de métadonnés (du haut de la partie tableur jusqu'au début de la partie Feuille de calcul) du tableur XML est stockée dans un fichier et cette partie est concaténée avec la portion concernant la fin du modèle en fin de méthode. Le contenu entre les balises <WorkSheet>, comme montré ci-dessous, est la partie où les données (y compris les titres de colonnes) sont inclus:

<Worksheet ss:Name="Client">
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="3" x:FullColumns="1" x:FullRows="1">
<Row>
<Cell><Data ss:Type="String">IDClient</Data></Cell>
<Cell><Data ss:Type="String">Nom</Data></Cell>
<Cell><Data ss:Type="String">Ville</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">112</Data></Cell>
<Cell><Data ss:Type="String">Ben Gordon</Data></Cell>
<Cell><Data ss:Type="String">San Jose</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">111</Data></Cell>
<Cell><Data ss:Type="String">John Smith</Data></Cell>
<Cell><Data ss:Type="String">Seattle</Data></Cell>
</Row>
</Table>
Comme vous pouvez le voir, la première ligne contiendra les titres des colonnes. Dans la méthode, après insertion des balises du tableur et des tables dans la variable texte, la balise d'entête <!--#4DQRheader-->...<!--/#4DQRheader--> est insérée. Le contenu à l'intérieur de cette balise vous permet de retrouver les titres de colonnes. Pour retrouver le titre, la balise <!--#4DQRData--> est utilisée. Et pour avoir tous les titres des colonnes, la balise est insérée dans les balises <!--#4DQRcol-->...<!--/#4DQRcol-->. Un fois que le titre est mis en place dans les cellules et les balises de données comme vous pouvez le voir dans la section <WorkSheet>, la cellule et les balises de données ainsi que leurs balises fermantes correspondantes sont elles-mêmes incluses dans la balise de colonne qui est incluse dans la balise d'en-tête. Dans cette ligne, les titres de colonnes sont répétés en tant que cellule dans ces balises.

Après la première ligne dans le tableur, les données des colonnes sont listées par ligne. En fonction du type de données, les données sont déclarées dans la balise de données. Le type de données sera dynamiquement détecté. Dans la méthode Construct_XML_Classeur, le numéro du champ de la colonne est utilisé pour récupérer ses propriétés. Pour cela, une fonction est appelée (GetTypeFunction) qui retournera le type "Number" ou "String". Le nombre de colonnes de l'Etat Rapide est d'abord retrouvé et on accède à chaque colonne dans une boucle comme montré dans la méthode Construct_XML_Classeur . Ceci est fait après l'insertion de la ligne pour la colonne Titre. Dans la boucle, les informations à propos des colonnes sont récupérées, ce qui permettra de retrouver le numéro du champ et de vérifier les propriétés du champ. La fonction GetType est appelée pour obtenir le type du champ.

Dans la méthode nommée, de façon à retrouver les informations pour chaque ligne de données, la boucle est insérée dans les balises <!--#4DQRrow-->--<!--/#4DQRrow--> dont le contenu sera répété pour chaque ligne. En utilisant la balise <!--#4DQRdata--> dans cette balise et insérée dans les balises <4DQRcol;n-->... <!--/#4DQRcol;n> qui permettent de retrouver chaque donnée pour une colonne précise (n). Inclut dans une cellule et des balises données et les balises fermantes correspondantes dans les balises colonne qui répéteront ces balises par données pour chaque colonne. Le type de données est déclaré dynamiquement comme montré dans la méthode projet Construct_XML_Classeur.

Après l'insertion de ces balises pour retrouver les données dans la méthode Construct_XML_Classeur, les balises fermantes correspondantes pour les balises Tableur (<WorkSheet>) sont insérées. A ce stade, la variable texte du modèle contient la partie inférieure de la feuille de calcul. Le fichier qui contient la partie supérieure est récupéré dans une variable texte et concaténé avec la fin du texte. Le modèle complet est alors passé en paramètre de la méthode.

Quand la méthode ExempleEtatRapide2 est exécutée en utilisant le modèle, un "spreadsheet" XML sera créé. Il peut être automatiquement ouvert avec Excel et ressemblera à la sortie montrée ci-dessous. Aucun message n'est affiché lorsque le fichier est ouvert car il est traité comme un .xls ou un fichier excel (à nouveau, ceci a été testé avec Microsoft Excel 2003).


Base exemple

La base Exemple qui accompagne cette note technique montre les deux méthodes qui génèrent une sortie XML qui sera compatible avec Microsoft Excel 2003 (Windows uniquement). Lorsque la base de données est chargée, un dialogue apparaît :


Lorsque vous cliquez sur le bouton "Générer fichier XML", la liste des enregistrements est généré en fichier XML. Et lorsque vous cliquez sur le bouton "Générer classeur XML" la feuille Excel est généré. Les noms et emplacements des fichiers sont affichés dans un dialogue. L'Etat Rapide (par programmation) est utilisé pour générer ces types de sortie.



Télécharger la base exemple.


Conclusion

L'éditeur d'Etats Rapides avec les sorties en fichiers HTML permet de générer des sorties XML qui peuvent être lues par Microsoft Excel 2003.

Excel 2003 supporte le standard XML et possède son propre format XML : le SpreadSheetML.

Vous pouvez générer une sortie pour Excel avec l'Editeur d'Etats Rapides en personnalisant le modèle HTML utilisé en type de sortie.

Le modèle consiste en des balises qui rendent possible la construction dynamique d'une sortie XML.

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique 4D