cs_isecso
Messages postés33Date d'inscriptionjeudi 17 août 2006StatutMembreDernière intervention 1 juin 2007
-
10 mai 2007 à 17:01
fredegill
Messages postés1Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 décembre 2009
-
4 déc. 2009 à 08:16
Salut tous
Ce code n'a pas put fonctionner .
<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') { est ce que cet TABLE est le non de tableau de la base ou tableau de html.
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;
}
//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>
le message d'erreur est "L'export vers Excel ne fonctionne qu'avec un tableau."
Merci d'avance .
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 11 mai 2007 à 09:36
Bonjour,
>>if (eSrc.tagName !='TABLE')
on teste ici si c'est bien l'ID d'un tableau html qui est passé en paramètre.
<table... >
on peut très bien s'inspirer de ce script pour faire autrement....
fredegill
Messages postés1Date d'inscriptionlundi 23 novembre 2009StatutMembreDernière intervention 4 décembre 2009 4 déc. 2009 à 08:16
BOnjour,
Beau script mais je n'arrive pas à l'adapter pour prendre en compte des en-têtes de colonnes s'étendant sur 3 colonnes en largeur .
Quelqu'un aurait-il une idée?
Merci de vos contributions