Exporter un tableau sous excel

Soyez le premier à donner votre avis sur cette source.

Vue 16 919 fois - Téléchargée 968 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

willinfeo
Messages postés
55
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
4 décembre 2005
-
Tout simplement genial. Simple et efficace
LocalStone
Messages postés
515
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009
-
J'ai mis une heure à piger pourquoi sur moi ça ne fonctionnait pas ... En fait, je suis trop con, j'ai pas installé excel. Voilà, désolé pour ce post
proffial
Messages postés
35
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
23 juillet 2009
-
si cela vous interresse, je viens de revoir la source afin qu'elle gere les styles ...
maintenant, y'a pas a dire, ca gere ;)
cs_shubacca
Messages postés
6
Date d'inscription
mercredi 26 juin 2002
Statut
Membre
Dernière intervention
30 août 2003
-
je t'ai mis 9/10, parce qu'il est toujours possible de faire mieux comme tu l'as si bien dit.
Mais je suis flatté que tu ai utilisé mon source pour faire le tien.

Je ne te tiens pas rigueur de tes remarques. Je trouve au contraire que c'est très constructif de pouvoir donner son avis. Toutefois, j'ai mis à disposition dans mon source une fonction de base pour laquelle j'avais indiqué que des améliorations était possible.

Bravo, pour ton excellent travail.
proffial
Messages postés
35
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
23 juillet 2009
-
Merci beaucoup pour ce commentaire,
Mais je n'aurai jamais reussi a faire un truc pareil sans ta source ;)

Donc je te remercie pour ton aide ;)

En tout cas, maintenant la gestion des tableaux devient vraiment simple :=)
Si on rajoute a ma source celle de francktfr : ( tri de tableau HTML )
http://www.javascriptfr.com/article.aspx?Val=724

on obtient des trucs super sympas ...
et facile a mettre en oeuvre.

Mais la, je vous laisse faire ....


Vive le Javascript ;)

Et si quelqu'un sait convertir du RVB stoké en hexa en code couleur a la microsoft, ou juste me dire comment marche le code couleur windobe,
et bien je vous promet d'actualiser la source en fesant de la vrai gestion de couleur ;)

Sur ce, bonne journée

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.