Exporter un tableau sous excel

Description

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

Codes Sources

A voir également

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.