bonjour, ce code comprend:
GESTION du colspan,
gestion des class, ...
très simple a personaliser et a mettre en oeuvre !!!
j'ai repris la source de shubacca:
http://www.javascriptfr.com/article.aspx?Val=308
et je l'ai modifiée un peu afin de gérer le colspan
et les couleurs, si l'on peut appeller cela de la gestion de couleur ...
dans la mise a jour j'ai intégré la gestion des styles pour excel ..
pour le voir dans internet explorer, il faut bien sur inclure un style dans l'entete ...
26/12/03: je viens de me rendre compte que phm a continuer paufiner encore tout ca et a créé une nouvelle source:
http://www.javascriptfr.com/code.aspx?ID=17140
alors allez faire un tour si vous voulez les toutes dernieres modification ;)
Source / Exemple :
<HTML>
<HEAD>
<TITLE>
</TITLE>
</HEAD>
<script LANGUAGE=javascript>
<!--
/*---------------------------------------------------------
Nom de la fonction : exportToXL
Description : Rempli une feuille Excel avec le contenu
d'un tableau
Entrées :
id -> id du tableau à exporter
Sorties :
En cas d'erreur renvoie false
---------------------------------------------------------*/
function exportToXL(id) {
eSrc=document.all(id) // recherche le composant ayant cet id
var oExcel; // Application Excel
var oExcelSheet; // Feuille de calcul
var oWkBooks;
var cols; // Nombre de colonnes du tableau
oExcel = new ActiveXObject('Excel.Application');
oWkBooks = oExcel.Workbooks.Add;
oExcelSheet = oWkBooks.Worksheets(1);
oExcelSheet.Activate();
if (eSrc.tagName != 'TABLE') {
alert('L\'export vers Excel ne fonctionne qu\'avec un tableau.');
return false;
}
// on calcule ici le nombre de cellule du tableau.
nb_cellule=eSrc.cells.length
for (var i = 0; i < eSrc.cells.length; i ++)
{
nb_cellule=nb_cellule+eSrc.cells(i).colSpan-1
}
// on en deduit le nombre de colonne de notre fichier excel
cols = Math.ceil(nb_cellule / eSrc.rows.length);
// nombre de cellule qu'il faut "passer " a cause du colspan
nb_colspan=0
// on initialise les valeures des cellules des tableau excel
for (var i = 0; i < eSrc.cells.length; i ++)
{
var c, r;
r = Math.ceil((i+nb_colspan+1) / cols); //lignes excel en cours
c = (i+nb_colspan+1)-((r-1)*cols) //colonnes excel en cours
nb_colspan = nb_colspan+eSrc.cells(i).colSpan-1; // mise a jour de nb_colspan
// gestion du colspan, on effectue un centrage sur plusieurs cellules ...
if (eSrc.cells(i).colSpan > 1 )
for (var j = 0; j < eSrc.cells(i).colSpan; j ++){
oExcel.ActiveSheet.Cells(r,c+j).HorizontalAlignment = 7 ;
// xlCenterAcrossSelection = 7 dans VBA
}
// pour le codage des couleurs j'ai pas trouver comment faire pour que ce soit autaumatique la convertion
// alors elle est manuelle: 336699 c'est du RVB en HEXA leur chiffre sous excel
// j'en ai aucune idée ...
if (eSrc.cells(i).bgColor=='#336699') // gestion des couleurs
for (var j = 0; j < eSrc.cells(i).colSpan; j ++)
oExcel.ActiveSheet.Cells(r,c+j).Interior.Color = 3368601 ;
// mise en forme dans excel celon la classe de la cellule si vous avez un fichier CSS
if (eSrc.cells(i).className=='titre' )
{
oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
oExcel.ActiveSheet.Cells(r,c).Font.Size = 15;
oExcel.ActiveSheet.Cells(r,c).WrapText = false; // pas de retour a la ligne automatique
oExcel.ActiveSheet.Cells(r,c).Font.ColorIndex = 3;
}
if (eSrc.cells(i).className=='sstitre' )
{
oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
oExcel.ActiveSheet.Cells(r,c).Font.Size = 12;
}
//En tête de colonnes
if (eSrc.cells(i).tagName == 'TH') {
oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
}
// Texte en gras
if (eSrc.cells(i).childNodes.length > 0 && eSrc.cells(i).childNodes(0).tagName == "B"){
oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
}
// Rempli le contenu
oExcel.ActiveSheet.Cells(r,c).Value = eSrc.cells(i).innerText;
}
oExcel.ActiveSheet.Cells.EntireColumn.AutoFit; // ajuster la largeur des colonnes sous excel.
oExcelSheet.Application.Visible = true;
}
//-->
</script>
<BODY>
<TABLE id=idTable name=idTable>
<TR>
<TH bgColor=#336699>Titre 1</TH>
<TH>Titre 2</TH>
<TH>Titre 3</TH>
</TR>
<TR>
<td colspan="3">Cell 1</TD>
</TR>
<TR>
<TD class=titre >Cell 1 </TD>
<TD>Cell 5</TD>
<TD>Cell 5</TD>
</TR>
<TR>
<div align=center>
<TD colspan='2' class=titre><b><div align=center>Cell 2</div></b></TD>
<TD class=sstitre>Cell 5</TD>
</div>
</TR>
<TR>
<td class=sstitre> Cell 3</TD>
<TD>Cell 7</TD>
<TD bgColor=#336699>Cell 5</TD>
</TR>
<TR>
<TD>Cell 4</TD>
</TR>
</TABLE>
<INPUT type="button" value="exporter vers excel" id=button1 name=button1 onCLick="exportToXL('idTable')">
</BODY>
</HTML>
Conclusion :
amusez vous bien avec ca ;)
pour connaitre les lignes de codes telles que
oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
allez sous excel enregistré une macro, en faisant ce que vous voulez integrer comme style,
puis visualisez le code ...
SURPRISE ;)
pensez simplement a transformer le True en true et n'oubliez pas le ; a la fin ;)
Enfin remplacé les constantes du type xlCenterAcrossSelection par leur valeurs ...
et merci a ceux qui me mettent une bonne note ;)
@lphonse
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.