EXPORTER UN TABLEAU SOUS EXCEL (BIS)

cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009 - 22 oct. 2003 à 11:44
chezeu Messages postés 21 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 6 juin 2010 - 4 oct. 2008 à 13:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17140-exporter-un-tableau-sous-excel-bis

chezeu Messages postés 21 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 6 juin 2010
4 oct. 2008 à 13:08
Ok Merci ça marche bien avec un tableau statique, mais le probléme c'est que j'ai un tableau dynamique qui est rempli avec les données de la BD, et dans ce cas ci ça ne marche plus. comment faire alors? Merci d'avance!
cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009
3 oct. 2008 à 14:33
C'est
qui ne va pas.
ça fait doublon avec <table width="200" border="1" id="tableau">

il faut renommer le div
chezeu Messages postés 21 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 6 juin 2010
3 oct. 2008 à 14:11
Merci pour le code mais la fonction ne s'execute pas chez moi. Qu'est qu'il faut faire? y'a t'il quelque chose à faire sur le tableau. SVP j'attend votre reponse
voici mon code.

<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Export</title>
<style type="text/css">
<!--
.InEo {visibility:hidden; font-size: 9px; }
.InEo {visibility:visible; font-size: 9px }
-->
</style>
<SCRIPT type="text/javascript">
function exportToExcel(tableau) {
oExcel = new ActiveXObject('Excel.Application');
oWkBooks = oExcel.Workbooks.Add;
oExcelSheet = oWkBooks.Worksheets(1);
oExcelSheet.Activate();
nbrCellules = tableau.cells.length;
for (i = 0; i < tableau.cells.length; i++) {
nbrCellules = nbrCellules + (tableau.cells(i).colSpan * tableau.cells(i).rowSpan) - 1;
}
nbrColonnes = Math.ceil(nbrCellules / tableau.rows.length);
tab = new Array();
for (j = 0; j < nbrCellules; j++) {
tab.push('*');
}
decal = 0;
for (k = 0; k < tableau.cells.length; k++) {
if ((tableau.cells(k).colSpan 1) && (tableau.cells(k).rowSpan 1)) {
if (k != (tableau.cells.length - 1)) {
while (tab.slice((k + decal), (k + decal + 1)) == '') {
decal = decal + 1;
}
}
tab.splice((k + decal),1,tableau.cells(k).innerText);
} else if ((tableau.cells(k).colSpan > 1) && (tableau.cells(k).rowSpan == 1)) {
tab.splice((k + decal),1,tableau.cells(k).innerText);
for (l = 0; l < (tableau.cells(k).colSpan - 1); l++) {
tab.splice((k + decal + l + 1),1,'');
}
decal = decal + tableau.cells(k).colSpan - 1;
} else if ((tableau.cells(k).colSpan == 1) && (tableau.cells(k).rowSpan > 1)) {
tab.splice((k + decal),1,tableau.cells(k).innerText);
for (m = 0; m < (tableau.cells(k).rowSpan - 1); m++) {
tab.splice((k + decal + ((m + 1) * nbrColonnes)),1,'');
}
} else if ((tableau.cells(k).colSpan > 1) && (tableau.cells(k).rowSpan > 1)) {
tab.splice((k + decal),1,tableau.cells(k).innerText);
for (n = 0; n < tableau.cells(k).rowSpan ; n++) {
for (o = 0; o < tableau.cells(k).colSpan ; o++) {
if ((n == 0) && (o != 0)) {
tab.splice((k + decal + n + 1),1,'');
decal = decal + 1;
} else if (n != 0) {
tab.splice(k + decal + (nbrColonnes - tableau.cells(k).colSpan) + o + 1 + ((n - 1) * nbrColonnes),1,'');
}
}
}
}
}
for (m = 0; m < tab.length; m++) {
r = Math.ceil((m + 1) / nbrColonnes);
c = (m + 1) - ((r - 1) * nbrColonnes);
oExcel.ActiveSheet.Cells(r,c).Value = tab.slice(m,(m + 1));
}
oExcelSheet.Application.Visible = true;
}
</SCRIPT>

</head>




















</html>
cs_poonam Messages postés 2 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 22 août 2007
22 août 2007 à 08:51
J'ai des problèmes avec les <html:select>. En exportant vers excel ca me montre tous les options et non pas l'option selecte
dadasurf Messages postés 3 Date d'inscription mardi 7 août 2007 Statut Membre Dernière intervention 8 août 2007
8 août 2007 à 09:32
Code finalisé pour gestion des rowspan:
http://www.javascriptfr.com/code.aspx?ID=43694
proffial Messages postés 35 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 23 juillet 2009
7 août 2007 à 14:07
Bonjour Dadasurf

merci pour ta contribution.

Mais afin que tout le monde en profite au maximum,

tu pourrais créer une nouvelle source en citant celle-ci en référence ?
et ajouter un post avec un lien par la meme occasion :-)

Merci d'avance

@lphonse
dadasurf Messages postés 3 Date d'inscription mardi 7 août 2007 Statut Membre Dernière intervention 8 août 2007
7 août 2007 à 12:24
Juste un petit changement pour tenir compte d'éventuels rowspan qui se suivent: remplacer la ligne:
"...if (tab.slice((k + decal), (k + decal + 1)) == '') {..."
par
"...while (tab.slice((k + decal), (k + decal + 1)) == '') {..."
dadasurf Messages postés 3 Date d'inscription mardi 7 août 2007 Statut Membre Dernière intervention 8 août 2007
7 août 2007 à 11:02
Bonjour,

Après avoir un peu buché sur ce problème de rowspan, je suis parti dans une autre direction consistant à comparer "l'indice réel" dans le tableau à "l'indice fictif" de ce tableau sans tenir compte des colspan et rowspan.
Voici le résultat (en espérant que ça pourra vous aider...):

function exportToExcel(tableau) {
oExcel = new ActiveXObject('Excel.Application');
oWkBooks = oExcel.Workbooks.Add;
oExcelSheet = oWkBooks.Worksheets(1);
oExcelSheet.Activate();
nbrCellules = tableau.cells.length;
for (i = 0; i < tableau.cells.length; i++) {
nbrCellules = nbrCellules + tableau.cells(i).colSpan + tableau.cells(i).rowSpan - 2;
}
nbrColonnes = Math.ceil(nbrCellules / tableau.rows.length);
tab = new Array();
for (j = 0; j < nbrCellules; j++) {
tab.push('*');
}
decal = 0;
for (k = 0; k < tableau.cells.length; k++) {
if ((tableau.cells(k).colSpan 1) && (tableau.cells(k).rowSpan 1)) {
if (tab.slice((k + decal), (k + decal + 1)) == '') {
decal = decal + 1;
}
tab.splice((k + decal),1,tableau.cells(k).innerText);
} else if (tableau.cells(k).colSpan > 1) {
tab.splice((k + decal),1,tableau.cells(k).innerText);
tab.splice((k + decal + 1),(tableau.cells(k).colSpan - 1),'');
decal = decal + tableau.cells(k).colSpan - 1;
} else if (tableau.cells(k).rowSpan > 1) {
tab.splice((k + decal),1,tableau.cells(k).innerText);
for (l = 0; l < (tableau.cells(k).rowSpan - 1); l++) {
tab.splice((k + decal + ((l + 1 ) * nbrColonnes)),1,'');
}
}
}
for (m = 0; m < tab.length; m++) {
r = Math.ceil((m + 1) / nbrColonnes);
c = (m + 1) - ((r - 1) * nbrColonnes);
oExcel.ActiveSheet.Cells(r,c).Value = tab.slice(m,(m + 1));
}
oExcelSheet.Application.Visible = true;
}
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 juin 2007 à 12:27
faut jouer avec TonRange.Merge
bvadam Messages postés 2 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 19 juin 2007
19 juin 2007 à 10:54
Salut,

vraiment super ce script mais c'est dommage qu'il ne gère pas les rowspan... Quelqu'un sait à quel niveau il faudrait intervenir pour gérer les rowspan ?

Merci
phdj238 Messages postés 8 Date d'inscription jeudi 9 septembre 2004 Statut Membre Dernière intervention 26 avril 2006
30 janv. 2006 à 14:09
Résolu :
Les retours à la ligne à la ligne tag
ou à l'intérieur d'une cellule sont mal traduits. En cherchant la méthode consiste avant remplissage de la cellule de supprimmer les retour chariots \r et de laisser les retours à la ligne \n

if (eSrc.cells(i).innerText.search(/\r\n/) != -1)
{
mystr = eSrc.cells(i).innerText.replace(/\r/g, '');
//Rempli le contenu sans carraige return
oExcel.ActiveSheet.Cells(r,c).Value = mystr;
}
else
{
// Rempli le contenu
oExcel.ActiveSheet.Cells(r,c).Value = eSrc.cells(i).innerText;
}
phdj238 Messages postés 8 Date d'inscription jeudi 9 septembre 2004 Statut Membre Dernière intervention 26 avril 2006
27 janv. 2006 à 18:19
Je souterais supprimmer les tags
ou ou les remplacer par un saut de ligne valide excel avant importation.
cs_eric51 Messages postés 1 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 15 décembre 2005
15 déc. 2005 à 00:05
script excellent, mais j'ai tout de même un problème.
Le formatage des cellules est mal géré ds l'exportation.
Peut-être du à des rowspan dans mes tableaux.
Es ce quelqu'un a eu le même prob et a su résoudre le problème?
cs_niahoo Messages postés 2 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 17 mai 2004
17 mai 2004 à 15:25
tres bon sccript mais j'ai trois commentaires a ce propos
1 - Je trouve k'il est assez lent, le meme a peu de chose près développé en VB est 2x plus rapide
2 - Le processus Excel ne s'arrête pas après l'avoir fermé (il faut que je le ferme du gestionnaire des tâches)
3 - Pas de gestion des rowspan
amosc Messages postés 82 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 18 octobre 2005
30 déc. 2003 à 17:09
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
27 déc. 2003 à 00:16
oula mais c'est génial ;)

en fait tout ca c'est grace a shubacca tout d'abord ...

Et ca fait super plaisir que vous compreniez comment ca marche ;)

il faudrait juste rajouter une ptite capture et hop le tour et joué ;)

sinon moi j'avais fait ca pendant un stage, j'avais le temps, mais pendant les eutdes, c'est pas pareil, enfin bon il faut faire avec ;)

Mais ca va revenir ;)

Bon en tout cas bravo, et je change mon commentaire de ma source pour leur dire de venir ici :)

@lphonse
cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009
22 oct. 2003 à 12:06
J'ai fait qq adaptation supplémentaires
que j'ai ajouté sous forme de commentaires
dans la contribution d'alphonse id 16372
normal tout ça c'est grâce à lui.

-suppression de la grille
- récup du CAPTION et insertion d'un titre en ligne 1
- Couleur de fond de la table

A+++
cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009
22 oct. 2003 à 11:56
// Rempli le contenu
oExcel.ActiveSheet.Cells(r,c).Value = eSrc.cells(i).innerText;
// Encadre
myCell=oExcel.ActiveSheet.Cells(r,c);
Encadre(myCell);

}
cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009
22 oct. 2003 à 11:44
function Encadre(myCell)
{
xlToRight=-4161;
xlDown=-4121;
xlNone=-4142;
xlEdgeLeft=7;
xlEdgeTop=8;
xlEdgeBottom=9;
xlEdgeRight=10;
xlContinuous=1;
xlThin=2;
xlAutomatic=-4105;
xlInsideVertical=11;
xlInsideHorizontal=12;
myCell.Borders(xlEdgeLeft).LineStyle = xlContinuous;
myCell.Borders(xlEdgeLeft).Weight = xlThin;
myCell.Borders(xlEdgeLeft).ColorIndex = xlAutomatic;

myCell.Borders(xlEdgeTop).LineStyle = xlContinuous
myCell.Borders(xlEdgeTop).Weight = xlThin
myCell.Borders(xlEdgeTop).ColorIndex = xlAutomatic

myCell.Borders(xlEdgeBottom).LineStyle = xlContinuous
myCell.Borders(xlEdgeBottom).Weight = xlThin
myCell.Borders(xlEdgeBottom).ColorIndex = xlAutomatic

myCell.Borders(xlEdgeRight).LineStyle = xlContinuous
myCell.Borders(xlEdgeRight).Weight = xlThin
myCell.Borders(xlEdgeRight).ColorIndex = xlAutomatic

}
Rejoignez-nous