Warning: opendir() [function.opendir]: open_basedir restriction in effect. File(../im/gauche/) is not within the allowed path(s): (/mnt/110/sdb/3/1/dypso) in /mnt/110/sdb/3/1/dypso/include/tools.php on line 196

Warning: opendir(../im/gauche/) [function.opendir]: failed to open dir: Operation not permitted in /mnt/110/sdb/3/1/dypso/include/tools.php on line 196

Warning: readdir(): supplied argument is not a valid Directory resource in /mnt/110/sdb/3/1/dypso/include/tools.php on line 198
- Dypso BackOffice
Dypso Backoffice
Dypso Backoffice


Techniques

Cette section permet de regrouper un ensemble de techniques ou de scripts qui ont l'originalité d'arriver à résoudre une difficulté avec le moindre effort ou qui sont particulièrement efficaces...


PDF

  •  Générer gratuitement des fichiers PDF :Convertir des fichiers HTML en PDF

Il peut être utile de produire des fichiers PDF depuis une page dynamique, pour générer les fichiers à la volée par exemple afin de créer des états de type publipostage , des listings ou même un formulaire à remplir. Plusieurs solutions s'offre alors à vous suivant le langage utilisé. Une méthode pratique et gratuite, utilisable par tous les langages peut être de transformer des fichiers HTML en PDF. Il existe pour cela plusieurs techniques. L'une d'elle repose sur l'utilisation d'un utilitaire gratuit : HTMLDoc. HTMLDoc est un exécutable qui permet de convertir un ou plusieurs fichiers HTML en fichier PDF. Il s'utilise normalement avec une interface graphique mais peut aussi être appelé en ligne de commande.

Avantages sur un serveur WEB :

  • Il est trés facile de générer un fichier HTML à transformer.
  • C'est une des méthodes les plus rapides et plus fiables pour des fichiers PDF simples.
  • De nombreux formats d'images sont supportés : BMP, GIF, JPEG, et PNG.
  • La table des matières peut être créée automatiquement

Inconvénients :

  • HTMLDOC ne gère pas encore les feuilles de styles CSS.
  • Il est moins aisé de générer des documents HTML trop complexes ( Par exemple : il existe une limitation dans le nombre d'imbrication de tableau HTML).
  • La compression des fichiers n'est pas optimale, aussi il faudrait éviter la génération de fichier PDF trop volumineux.
  • Il est difficile d'avoir un formatage précis des fichiers générés

Commande sous DOS :

htmldoc -t pdf --quiet -webpage -f fichier.pdf fichier.html

Par contre depuis un site dynamique, si vous devez générer les fichiers PDF à la volée depuis ASP ou PHP, par exemple, il vous faut écrire un fichier HTML qui sera transformer via la ligne de commande exécutée depuis le serveur WEB . Cet appel peut être coûteux en temps de traitement.

Générer un fichier PDF à la volée depuis ASP :


' ****** La ligne de commande

CmdeHTMLDOC = chr(34)&"C:\Program Files\HTMLDOC\htmldoc.exe" &_
chr(34)& "  -t pdf --quiet "& _
"  --webpage -f "



' En consultant le fichier de documentaion de HTMLDOC 
' vous vous rendrez compte
' qu'un certains nombre de paramètres peuvent aussi être
' précisés, comme la police, sa taille, la compression
' du document final, etc. Par exemple :
' CmdeHTMLDOC = chr(34)& _
' "C:\Program Files\HTMLDOC\htmldoc.exe" & _
' chr(34) & "  --compression=1 --no-toc " & _
' " --pagemode document  "& _
' " --textfont Arial "& _
' " --fontsize 8 "& _
' " --header ... --footer ...  "& _
' " --size a4 --left 1.5cm "& _
' " --right 1.5cm "& _
' " --fontspacing 2 --webpage -f "



' ******* génération du fichier HTML à la volée
Set FSO =   Server.CreateObject("Scripting.FileSystemObject") 
name_fileHTML= "fichier.html"
dir = Server.MapPath(name_fileHTML)
set inF = FSO.OpenTextFile(dir,2,true) 
	
inF.write "<html><body>".
	"<table border=""1"" width=""90%"">".
	"<tr><th>Employé</th><th>Salaire</th></tr>".
	"<tr><td>Smith</td><td>1 000 euros</td></tr>".
	"</table>".
	"</body></html>"
	
'fermeture fichier HTML
inF.close
			
	
	
' ******* génération du fichier PDF
set wshell=Server.CreateObject("wscript.shell")

' ******* Ligne de commande complétée par les chemins 
' ******* des fichiers source HTML et de destination en PDF :

fic_html = dir
fic_pdf = Server.MapPath("fichier_test.pdf")

wpath= CmdeHTMLDOC &chr(34)& _
fic_pdf &chr(34)&" "& chr(34)& fic_html &chr(34)

' ******* Lancement de la commande
wshell.Run wpath, SW_SHOWNORMAL,true
Set wshell=nothing

' ******* L'ouverture du document peut se faire  
' ******* alors simplement en JavaScript :

Response.write "<script>window.document.location.href='" & _
	 	Server.MapPath("fichier_test.pdf") & _
		"';</script>"

' ******* Fin du script
Response.End
Convertir une page HTML en ligne, en fichier PDF depuis PHP :
header("Content-Type: application/pdf");
flush();
$CmdeHTMLDOC= 'htmldoc -t pdf --size A4 --webpage'.
	' -f c:\SITE_PROG.pdf http://dypso.free.fr';
passthru($CmdeHTMLDOC);		

  •  Générer gratuitement des fichiers PDF : Utiliser une imprimante virtuelle

Voici une nouvelle solution permettant de générer gratuitement et facilement des fichiers PDF depuis un serveur web pour les applications dynamiques ou depuis n'importe quel PC afin de permmettre la création de fichier PDF sans avoir à acheter la licence Adobe Acrobat Writer.

Cette méthode permet à n'importe quelle application ayant la possibilité d'imprimer de générer uin fichier PostScript ou PDF en sortie. Elle repose simplement sur l'installation d'une imprimante dite virtuelle (car celle-ci n'est pas physique même si elle s'ajoute à la liste des imprimantes installées sur le poste). Voici la liste des fichiers à installer pour tirer partie de cette solution :


Note importante :
Il existe un outil gratuit permettant de créer de PDF gratuitement comme le ferait Adobe Acrobat Writer : PdfCreator. Cet outil lors de son installation, installe notamment l'ensemble des outils précédemment mentionnés. Il pourra donc vous faciliter l'installation de votre imprimante virtuelle PS/PDF.

  •  Générer gratuitement des fichiers PDF : Utiliser une librairie de code

Pour générer un fichier PDF directement depuis le code il existe aussi la possibilité d'utiliser une librairie ou une classe. Actuellement il en existe des gratuites dans le monde PHP, mais la plus connue est certainement FPDF, notamment pour sa gratuité et sa simplicité. Elle reste un outil relativement convenable pour générer des documents non volumineux. Vous pouvez là télécharger ici :

Enfin il existe son pendant ASP depuis peu (une traduction de la librairie pour ASP) :



Vous pourrez je l'espère télécharger directement depuis ce site un composant écris en visual basic 6 assez performant pour réaliser cette tâche : il est encore en période de codage mais ça ne saurait tarder!

  •  Générer des fichiers PDF : Utiliser le toolkit FDF

Cette dernière solution n'est pas forcément gratuite parcequ'elle demande la création d'un template de base au format PDF. L'astuce est alors de se servir du format formulaire de Acrobat afin de définir des champs de formulaire que l'on pourra remplir dynamiquement via le kit FDF proposé gratuitement en téléchargement sur le site Adobe. Celui-ci inclut pour ASP une DLL qu'il suffit d'enregistrer sur le serveur, une documentation accompagne aussi l'ensemble du kit. Mais cette méthode présente aussi le désavantage d'avoir une structure rigide : le template de base n'est pas modifiable dans le sens ou l'on ne peut pas à la volée définir de nouvelles pages que celles déjà existantes. Elle reste une solution valide si le besoin se limite à redéfinir certaines valeurs dans un masque prédéfini comme une facture, un listing délimité ( dont on connait le nombre d'enregsitrement maximum ...).


Excel
  •  Générer des fichier excel simple à la volée (1) :

Dans la gestion d'un intranet, extranet et même plus généralement sur tout site web, il peut être intéressant de générer des fichiers excel à la volée car les utilisateurs sur PC windows sont habitués à travaillés avec ce format de données. Ils ont de plus la possibilité de retravaillés ces données afin d'effectuer des statistiques ou générer une sortie graphique.

Depuis n'importe quel langage dynamique, il est extrêmement facile de générer des fichiers excel simple à la volée car le logiciel de Microsoft Windows prend en charge la lecture du format HTML. Il n'est donc pas compliqué de produire un fichier HTML et l'envoyer au navigateur client en lui précisant dans les entêtes que le fichier devra être ouvert par le logiciel Excel.

(Attention cela suppose que le client possède effectivement le logiciel installé sur son poste) .
Cette solution reste trés pratique, facile à implémenté mais sont problème majeur tient sûrement au fait qu'on ne peut afficher qu'une seul page Excel dans le classeur.
Elle a toutefois le mérite d'être supportée depuis Excel 97 et devrait donc fonctionner sur la majorité des clients ayant installé Excel sur leur machine.

Générer un état excel depuis ASP :

Pour celà il suffit simplement avant toute chose de changer le type MIME du document dans le header afin de déclarer que le contenu du document est un fichier excel et non un fichier HTML :

<% 
Response.ContentType = "application/vnd.ms-excel"
%>

Ensuite il s'agit de créer un tableau HTML de données résultant par exemple de l'interrogation d'une base de données :

<% 
'Crée un objet connection à
'la base de données 
set Con =server.createobject("adodb.connection")
connpath="DBQ=" & server.mappath("my_access_database.mdb")
Con.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " &_
 connpath

'Crée un objet recordset pour recueillir 
'les données issue de la requête
set RS=objconn.execute("select * from products")
%>
     <TABLE BORDER=1>
        <TR>
<% 'Faire une boucle sur tous les champs afin d'afficher 'leur nom comme entête de colonnes For i = 0 to RS.Fields.Count - 1 %> <td><%=RS.Fields(i).name%></td> <% next %> </TR> <% 'Faire une boucle sur chaque ligne 'pour afficher les résultats While not RS.EOF %> <TR> <% For i=0 to RS.Fields.Count -1 %> <TD><%=RS.Fields(i)%></TD> <% NEXT %> </TR> <% RS.MoveNext Wend RS.Close Con.Close Set RS = Nothing Set Con = Nothing %>

Voilà comment afficher un fichier excel assez simplement. Bien que basique cette méthode permet de produire rapidement des fichiers à destinations des utilisateurs.

Il est toutefois possible d'enrichir un peut plus l'état final en insérant des formules comme celle-ci :

<tr><TD>=SUM(C1:C4)</TD></tr>
          

Cela indique que le résultat afficher dans la cellule du tableau sera la somme des cellules C1 à C4 calculée par Excel! Il est aussi possible de formater le contenu de la cellule pour avoir une somme monétaire (regroupement des chiffres en triplets) en précédant la valeur d'un signe $, ainsi :

<TD>$<%=RS.Fields(i)%></TD>

Générer un état excel depuis PHP :

Bien sûr, il est aussi facile en utilisant la même méthode de générer des fichier excel à la volée depuis PHP :

// il suffit de préciser le type MIME du document  
header ("Content-type: application/vnd.ms-excel"); 

//ensuite il n'y a plus qu'à générer un tableau HTML 
echo "<table><tr><td>Employé</td><td>Salaire</td></tr>".
     "<tr><td> Mr Smith</td><td>2 000 €</td></tr></table>";

  •  Générer des fichier excel simple à la volée (2) :

Depuis la version 2000 de Excel il est aussi possible de générer des feuilles de calcul Excel au format XML. Cette méthode n'est pas certes prise en charge par toutes les versions d'Excel (97 notamment qui est assez répandu), mais elle permet contrairement à la méthode précédente de créer plusier feuilles dans le même classeur.

La description des tags XML utilisés peut être trouvée directement sur le site de Microsoft :
- http://msdn.microsoft.com/library/en-us/dnexcl2k2/html/odc_xmlss.asp?frame=true

  •  Générer des fichier excel simple à la volée (3) :

Parmi les différentes méthodes existantes permettant la création d'un fichier excel à la volée, outre l'envoi d'information au format HTML, un des formats les plus simples géré par excel reste le fichier CSV (Comma Separated Value). C'est un fichier texte portant l'extention CSV, indiquant qu'il contient des valeurs séparées par des virgules. Chaque donnée de chaque colonne et séparée de la suivante par une virgule. Pour effectuer une nouvelle ligne dans le fichier, il suffit d'effectuer un saut de ligne.

Génération d'un fichier CSV à la volée depuis PHP :

<?php
	
	
//Nous allons généré une feuille excel 
//comportant 3 colonnes et deux lignes de données
	
	
$data = "Nom" . ',' . "Prénom" . ',' . "Email" . "\n" ;
$data .= "Smith ,  Will , will@beatnik.com    \n "  ;
$data .= "Dypso , Da  , dypso@free.fr \n";
	
	
	
/*
//nous pourrions éventuellement sauvegarder le contenu
//de la donnée $data dans un fichier 
//sur disque avant de l'envoyer au client
	
$fp = fopen("test.csv","a"); 
	
if($fp){
   //On écrit $data dans notre fichier csv
   fwrite($fp,$data);   
   fclose($fp);  
	   
} else {
	echo "Une erreur c'est produite ".
	"lors de la création du fichier csv!";
}
*/


//Nous envoyons les entêtes	
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.csv");
header("Pragma: no-cache");
header("Expires: 0");
	
/*
//si nous avons opté pour ne pas écrire de fichier 
//sur disque nous écrivons alors simplement le contenu  
//de notre fichier CSV dans le flux de sortie vers le client.
*/
echo $data;
?>
  •  Générer des fichiers excel à la volée (4) :

Une autre solution permettant de générer des fichiers Excel à la volée est de piloter une application Excel. Cela suppose qu'une version d'Excel est installé sur le serveur et que votre script s'exécute sur une plateforme Windows. C'est par là que cette solution est déjà à éviter. Elle pose d'ailleurs d'autres problèmes :

  1. Les applications office ont besoin d'un profil d'utilisateur pour fonctionner même lorsqu'elles sont pilotées par Automation : ainsi elles peuvent initialiser la position des barres de menus, les préférences au niveau des imprimantes, etc. Or les services IIS peuvent tourner sous des comptes qui ne sont pas celui de réels profil utilisateur ( comme SYSTEM ou bien IWAM_[nom_du_serveur] ) et le fait de lancer l'application Excel avec l'instruction createObject pourrait entraîner une erreur.
  2. Les applications Office proposent une interactivité avec le bureau qui peut porter à préjudice pour notre applicatioin Web. En effet pour certaines opérations ou même si un argument incorrect se présente avec l'utilisation de certaines fonctions de l'application, une fenêtre de dialogue modale peut apparaître et stopper ainsi toute exécution de l'application jusqu'à ce que l'on ait appuyer sur ENTER.
  3. A cause de l'utilisation des macros dans les applications Office, l'installation d'Excel reste un véritable trou dans la sécurité.
  4. Enfin il reste à trouver une solution afin de nettoyer régulièrement les fichiers produits sur le serveur.

Piloter une application excel avec PHP :
Voici comment piloter une application Excel depuis PHP en passant par l'interface COM de Microsoft.

<?php
   print "Hi";
#Instantiate the spreadsheet component.
#    $ex = new COM("Excel.sheet") or 
	Die ("Did not connect");
$exapp = new COM("Excel.application") or 
	Die ("Did not connect");

#Get the application name and version   
print "Application name:{$ex->Application->value}
" ; print "Loaded version: {$ex->Application->version}
"; $wkb=$exapp->Workbooks->add(); #$wkb = $ex->Application->ActiveWorkbook or Die ("Did not open workbook"); print "we opened workbook
"; $ex->Application->Visible = 1; #Make Excel visible. print "we made excell visible
"; $sheets = $wkb->Worksheets(1); #Select the sheet print "selected a sheet
"; $sheets->activate; #Activate it print "activated sheet
"; #This is a new sheet $sheets2 = $wkb->Worksheets->add(); #Add a sheet print "added a new sheet
"; $sheets2->activate; #Activate it print "activated sheet
"; $sheets2->name="Report Second page"; $sheets->name="Report First page"; print "We set a name to the sheet: $sheets->name
"; # fills a columns $maxi=20; for ($i=1;$i<$maxi;$i++) { $cell = $sheets->Cells($i,5) ; #Select the cell (Row Column number) $cell->activate; #Activate the cell $cell->value = $i*$i; #Change it to 15000 } $ch = $sheets->chartobjects->add(50, 40, 400, 100); # make a chartobject $chartje = $ch->chart; # place a chart in the chart object $chartje->activate; #activate chartobject $chartje->ChartType=63; $selected = $sheets->range("E1:E$maxi"); # set the data the chart uses $chartje->setsourcedata($selected); # set the data the chart uses print "set the data the chart uses
"; $file_name="D:/apache/Apache/htdocs/alm/tmp/final14.xls"; if (file_exists($file_name)) {unlink($file_name);} #$ex->Application->ActiveWorkbook->SaveAs($file_name); # saves sheet as final.xls $wkb->SaveAs($file_name); # saves sheet as final.xls print "saved
"; #$ex->Application->ActiveWorkbook->Close("False"); $exapp->Quit(); unset($exapp); ?>
Il est aussi facile de générer des fichiers Excel sur le serveur en utilisant ASP pour piloter par Automation l'application Excel :
	
<%
'Soit le fichier : EXCEL.INC
xlAutomatic = -4105

xlCenter=-4108
xlLeft = -4131
xlRight = -4152
xlBottom = -4107

xlNone = -4142

xlDiagonalDown = 5
xlDiagonalUp = 6
xlEdgeLeft = 7
xlEdgeTop = 8
xlEdgeBottom = 9
xlEdgeRight = 10
xlInsideVertical = 11
xlInsideHorizontal = 12

xlThin = 2
xlThick = 4
%>
	
	
'Et ensuite voilà comment générer un fichier excel au
'nom aléatoire et l'ouvrir pour l'utilisateur :

<!--#include file = "../Include/OpenConnection.asp"-->
<!--#include file = "../Include/EXCEL.INC"-->
<HTML>
<%
Dim rsAsp
Set rsAsp = Server.CreateObject("ADODB.Recordset")

Dim ex
Set ex=Server.CreateObject("Excel.Application")

Dim fs,f
Set fs=Server.CreateObject("Scripting.FileSystemObject")
f = fs.GetBaseName(fs.GetTempName()) & ".xls"

ex.Workbooks.Add

ex.ActiveSheet.Range("E1").Value = "Something"

ex.ActiveSheet.Range("A1:C1").Select
ex.Selection.Merge
ex.Selection.Value = "Title"
ex.Selection.Interior.ColorIndex=15
ex.Selection.Font.Bold=True
ex.Selection.Font.Size=12
ex.Selection.Font.ColorIndex=2

ex.ActiveSheet.Range("A2:C2").RowHeight = 24
ex.ActiveSheet.Range("A2:C2").HorizontalAlignment = xlCenter
ex.ActiveSheet.Range("A2:C2").VerticalAlignment = xlCenter
ex.ActiveSheet.Range("A2:C2").WrapText = True

ex.ActiveSheet.Columns("A:A").ColumnWidth = 10

rsAsp.Open "SELECT * FROM Table1", conn
Dim i
i=3

While not rsAsp.EOF
  ex.ActiveSheet.Cells(i,1).Value = rsAsp.Fields(0)
  ex.ActiveSheet.Cells(i,2).Value = rsAsp.Fields(1)
  rsAsp.MoveNext 
Wend

ex.ActiveWorkbook.SaveAs Server.MapPath(".") & "\" & f
ex.Quit

Set rsAsp = Nothing
Set ex = Nothing
Set fs = Nothing
%>
<body onload="document.location.href='<% =f %>'">
</HTML>
<!--#include file = "../include/CloseConnection.asp"-->
	
  •  Générer des fichiers excel à la volée (5) :

Dans la mesure où le client possèderait Excel installé sur sa machine la solution précédente de contrôle par Atomation peut éventuellement se faire directement sur le poste client. Evidemment avec les problèmes de sécurités que cela implique.

  •  Générer des fichiers excel à la volée avec ASP (6) :

Une des méthodes les plus efficaces qu'il reste pour générer gratuitement des fichiers Excel est de passer par l'A.D.O.. Autrement dit, un fichier Excel modèle peut être créé et installer sur le serveur, ASP pourra ensuite l'interroger, le modifier comme s'il s'agissait d'une base de données via un accès ADO.
Nous pouvons trouvés plusieurs avantages à cette méthode :

  1. Les fichiers générés ne seront pas stockés sur le disque du serveur et supprimés aussitôt après utilisation.
  2. L'installation de l'application Excel n'est nullement requise sur le serveur. Il y a juste besoin de la bibliothèque ADO au moins 2.5 pour quelle permette l'utilisation d'ADODB.Stream

Dans l'exemple suivant, un fichier excel nommé mon_template.xls est créé en vue de servir de modèle. Afin de pouvoir effectuer les requêtes d'update, une zone a été définie dans le fichier Excel. Pour cela il vous suffit d'ouvrir votre fichier, de sélectionner le nombre de colonnes correspondant au nombre de champ de votre base que vous allez y inclure, et le nombre de lignes adéquats. Ensuite il faut définir la zone nommé : Menu insertion/Nom/Définir... Dans l'exemple suivant la zone a été nommée "xls_colonne".

        
<%
Response.Expires = -2000
Response.Buffer = TRUE

'--- Create temporary file
Dim path
path=Server.MapPath(".")

Dim fs, file
Set fs=Server.CreateObject("Scripting.FileSystemObject")
file = path & "\tmp\" & fs.GetTempName
fs.CopyFile path & "\templates\mon_template.xls", file

'--- Modifier le fichier excel
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & file & _
               ";Extended Properties=""Excel 8.0;HDR=NO;"""

Dim oProdConn, oProdRS
Set oProdConn = Server.CreateObject("ADODB.Connection")
Set oProdRS =  Server.CreateObject("ADODB.Recordset")
oProdConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;"& _
		" Data Source=" & _
                path & "\ma_base.mdb"

'Nous récupérons les données contenues dans matable   
'depuis la base Access
oProdRS.Open "SELECT * FROM matable", oProdConn
                   
Dim oRS 
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.Open "Select * from xls_colonne", oConn, 1, 3 
' Rappel : 1=adOpenKeyset, 3=adLockOptimistic
    


Do Until oProdRS.EOF
    oRS.AddNew
    For i = 0 To 2
        oRS.Fields(i).Value = oProdRS.Fields(i).Value
    Next
    oRS.Update
    oProdRS.MoveNext
Loop
    
oProdRS.Close
Set oProdRS = Nothing
oProdConn.Close
Set oProdConn = Nothing
    
oConn.Close
Set oConn = Nothing

'--- Envoyer le flux de sortie au 
'--- navigateur en définissant le type MIME
Response.ContentType = "application/vnd.ms-excel"

Dim vntStream

Set oMyObject = Server.CreateObject("ADODB.Stream")
oMyObject.Type = 1 'adTypeBinary
oMyObject.Open
oMyObject.LoadFromFile file 
vntStream = oMyObject.Read

Response.BinaryWrite(vntStream)

'--- Suppimer le fichier temporaire
'--- et les références.

oMyObject.Close
fs.DeleteFile file

Set oMyObject = Nothing
Set fs = Nothing

Response.End
%>
        
        
  •  Générer des fichiers excel à la volée avec ASP (7) :

Il est aussi possible de générer d'autres formats de fichiers exploitables par Excel. Il est possible par exemple d'utiliser le format SYLK(Symbolic Link). Celui-ci présente l'avantage d'être un fichier de type texte et donc facile à produire, il est de plus indépendant de la plateforme utilisée. Un autre avantage non négligeable provient du fait qu'il est reconnu par la majorité des tableur dont Excel. A la différence des fichiers CSV qui ne proposaient que l'envoi d'informations brutes, ce formart offre de plus l'avantage de permettre la mise en forme des informations affichées dans le tableur.

Structure d'un document SYLK

On peut observer 4 parties dans un fichier SYLK :

  • Le header : il permet de définir le format des données affichées :
    1. Texte
    2. réel
    3. entier
    il permet aussi de définir les polices :
    1. Nom
    2. Taille
    3. Attribut
    il permet aussi de définir le nombre de lignes et de colonnes utilisées dans le document.
  • Section spécifiant la largeur des colonnes
  • Section indiquant les données du document : pour chaque cellule nous pouvons spécifié sur une ligne le format et sur une seconde ligne la donnée associée
  • Délimiteur de fin de fichier

Les fichiers SYLK sont formés d'enregistrements séparés par un retour à la ligne. Les lignes vides étant ignorées. En fait pour chaque ligne on peut retrouvé une mention indiquant le type champ de la ligne (Record Type Descriptor), une autre décrivant le format utilisé (Field Type Descriptor) et enfin la donnée (Field): L'intreprétation du format utilisé est dépendante du type de champ que l'on renseigne, et de la même manière le champ de données peut dépendre du format utilisé.

Un descripteur de champ ne comprend normalement pas plus de deux lettres qui sont généralement écrite en majuscule.

Un descripteur de format est écrit sous la forme suivante : ";X", c'est à dire le point virgule suivi d'une lettre. Les descripteur de format suivants : ;U, ;V, ;W, ;X, ;Y et ;Z , sont communs à tous les champs possibles, les autres peuvent varier.

Enfin les champs de données ne peuvent contenir de retour charriot ou de retour à la ligne, les points virgules sont échappés en les doublant : ";;". Les descripteurs de format ;X et ;Y déterminent les coordonnées en colonnes et lignes, l'origine de la feuille du classeur utilisée étant 1,1.

Voici la description du format du fichier SYLK :
Les éléments séparés par les signes < et > sont des champs et sp signifie un espace.

Type de champFormatDonnées
ID : premier champs du fichier ;PNom du programme ayant créé le fichier
Exemple : ;PMonProg
F :Permet de définir un format pour toute la feuille ou une seule cellule (1) ;X ;Y (diff) En précisant les coordonnées des cellules concernées
(2) ;F < cl > sp < n > sp < c2 > (diff) Propriété de formatage des cellules < cl > peut prendre une de ces valeurs :
D defaut
C Affichage continu sur plusieures cellules
E Notation avec exposant
F Nombre decimal
G Format général
< n > est le nombre de décimales.
< c2 > peut prendre une de ces valeurs précisant l'alignement :
D Alignement par défaut
C Alignement centré
G Général (Le texte à gauche, les nombres à droite)
L Alignement à gauche
R Alignement à droite
(3) ;R ;c Permet d'appliquer les propriétés à une colonne ou une cellule entière.  
(4) ;D < cl > sp < n > sp < c2 > sp < n3 > Le format par défaut est défini avec ;F . Mais ;D ne peut être utilisé. < n3 > Est la largeur par défaut des colonnes.
(5);K S'il est précisé les virgules servent de délimitateurs (S);E Si précisé l'option de format de formule est utilisé.  
(7);W< n1 > sp < n2 > sp < n3 > Permet de définir les largeurs d'un groupe de colonnes. < n1 > est la première colonne
< n2 > est la dernière colonne
< n3 > est la largeur de colonne en nombre de caractères
B : sert à définir les colonnes et lignes limites utilisées ;Y ;X Numéro de lignes et de colonnes
Exemple : B;Y3;X3
C
Permet de préciser la valeurt numérique ou texte d'une cellule, ou la formule qu'elle contient... Plusieurs formats peuvent êre appliqués :
(1) ;X ;Y Coordonnées de cellules.
(2);K Permet de préciser la valeur de la cellule. La valeur doit être entre guillemet (Une valeur d'erreur étant précédée du symbole #).
(3);P Si précisé la cellule est verouillée.
(4) ;E < expr > Permet d'introduire une forule au format Multiplan.
(5) ;R ;C (diff) voir pour le format ;S, ci-après.
(6);S
L'expression pour cette cellule est donnée par une autre coordonées où X=C et Y=R. Le contenu du champ correspond aux coordonées décimales. ;E ne peut apparître dans la même définition de format avec ;S. La cellule à ;R;C doit être marquée avec ;D ou un ;G.
 
(7);D ;E L'expression est partagée avec une autre cellule.
(8);G ;K la valeur est partagée avec une autre cellule.
;E ne doit pas apparaître.
 
E : permet de définir la fin du fichier.

Un très bon article sur le sujet est disponible ici : http://www.phpinfo.net/articles/article_sylk.html.

  •  Générer des fichiers excel à la volée avec ASP (8) :

Enfin une des méthodes existantes est la possibilité de générer des fichiers Excel au format binaire directement. Le format utilisé par Excel est le format Biff (Binary File Format). Le problème est que le format n'est pas trés documenté par Microsoft.


Téléchargement de fichier en ASP
  •  Le fonctionnement de l'upload de fichier:


SQL

  •  Afficher une arborescence en une requête. [Menu intervallaire]


SQL et sécurité

  •  Attention trous de sécurité ASP/SQL SERVER : SQL injection


CSS

  •  Créer une infobulle personnalisée sans javascript.

D'ordinaire afin de pouvoir créer une infobulle il est fait recours à l'attribut legend ou title. Mais dès qu'il est question de personnalisé la bulle d'aide, généralement c'est une technique à base de layer et de javascript qui est employée. Voici comment présenter le plus simplement du monde une infobulle à l'apparence personnalisée sans avoir recours au javascript :


<STYLE>
a.info{
    position:relative; 
    z-index:24; background-color:#ccc;
    color:#000;
    text-decoration:none}

a.info:hover{z-index:25; background-color:#ff0}

a.info span{display: none}

a.info:hover span{ 
/*le contenu de la balise span ne 
sera visible que pour l'état a:hover */
 display:block; 
 position:absolute;
    
    
    top:2em; left:2em; width:15em;
    border:1px solid #6699cc;
    background-color:#eeeeee; color:#6699cc;
    text-align: justify;
    font-weight:none;
    padding:1px;
    
    }
</STYLE>

Cela permet d'avoir une infobulle Information qui s'affiche normalement au passage de la souris afin de fournir comme ici une information contextuelle par exemple ou simplement afficher une légende particulière!