Exporter un tableau sous excel

Soyez le premier à donner votre avis sur cette source.

Vue 17 384 fois - Téléchargée 999 fois

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

Ajouter un commentaire

Commentaires

cs_radoso
Messages postés
5
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
18 avril 2008

vous n'avez pas une idée pour intégrer ce code source super pratique dans un fichier .php??
merci d'avance!
cs_aityahia
Messages postés
2
Date d'inscription
mercredi 12 juillet 2006
Statut
Membre
Dernière intervention
8 octobre 2006

bon j'ai tres bien testé la fonction elle marche a mérveille sur Ie sauf pour les couleur elle ne fonctionne pas sur firefox
amosc
Messages postés
82
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
18 octobre 2005

tt simplement bravo pour l'idée et merci de contribuer à l Edifice du monde OpensOurce by et encore bravo ...
proffial
Messages postés
35
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
23 juillet 2009

pour le verouillage j'en ai aucune idée,
sinon l'active x doit uniquement etre sur le client car c'est du javascript donc tout s'execute du coté client ;)

sinon je remercie phm pour ces bouts de code et conseils, je vais bientot mettre a jour la source, mais pas ce soir ;)

bonne continuation
gloups2
Messages postés
2
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
23 octobre 2003

Autre question, l'activex doit etre aussi sur le serveur apache ou il peut etre sur client ie ?????

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.