Automation excel par javascript

Contenu du snippet

Quelques lignes de codes javascript pour utiliser l'activex EXCEL.
J'ai utilisé ça pour obtenir la fonctionnalité excel qui permet, lors d'une impression, d'adapter l'état sur une page en hauteur et en largeur.
Ainsi le tableau encours est imprimé sur une page quelque soit sa taille (dans les limites acceptées par excel).
Je suis parti d'une source trouvée sur le net en y ajoutant les diverses fonctionnalités que je recherchais.(par ex : http://www.yaduk.co.uk/2009/07/22/javascript-export-html-table-excel-jscript/)
L'intérêt de ce source réside dans les instructions (certaines ne sont pas tés faciles à trouver sur le net) qu'il contient. Son fonctionnement est spécifique à l'application dans lequel est utilisée la fonction.
Dernière chose : ca ne fonctionne qu'AVEC IE !!! (Activex oblige !)

Source / Exemple :


<html>
<head>
<script type="text/javascript">
function Print_xl() {
			// déclaration de l'objet activeX
			var xlApp = new ActiveXObject("Excel.Application");
			// Silent-mode:
			//xlApp.Visible = true;
			xlApp.DisplayAlerts = false;
			var xlBook = xlApp.Workbooks.Add(); // déclaration du classeur
			xlBook.worksheets("feuil1").activate;
			var xlSheet = xlBook.activeSheet;// déclaration de la feuille
			xlSheet.Name="JavaScript Export to Excel";//on peu nommer le feuille
			//Declarations des constantes utilisées dans l'activex
// les alignements dans les cellules
			var xlVAlignBottom = -4107;
      var xlVAlignTop = -4160;
      var xlVAlignCenter = -4108;
      var xlVAlignDistributed = -4117;
      var xlVAlignJustify = -4130;
      
      var xlHAlignCenter = -4108;
      var xlHAlignCenterAcrossSelection = 7;
      var xlHAlignDistributed = -4117;
      var xlHAlignFill = 5;
      var xlHAlignGeneral = 1;
      var xlHAlignJustify = -4130;
      var xlHAlignLeft = -4131;
      var xlHAlignRight = -4152;
      
      // les bordures des cellules
      var xlSolid=1;
      
     	var xlContinuous = 1;
	var xlThin = 2;
	// les cotés des cellules		
	var xlBottom = -4107;
	var xlLeft = -4131;
	var xlTop = -4160;
	var xlRight =-4152;
	// orientation de la page		
	var xlPortrait=1;
			
	// on stock les lignes du tableau html dans un tableau de données. on aura ainsi le nombre de lignes
	var rows = tableau.getElementsByTagName("tr");
	var columns = 4;// parce que mon tableau a 4 colonnes
	var data = tableau.getElementsByTagName("td"); // les données du tableau html sont stockées dans data

	//Mise en forme de l'entete
    //ligne 1 et 2 hautes de 20 px
    xlSheet.Rows(1).RowHeight = 20;
    xlSheet.Rows(2).RowHeight = 20;
    //Fusion des cellules A1 et A2
    xlSheet.Range(xlSheet.Cells(2, 1),xlSheet.Cells(1,1)).mergecells=true;
    //xlSheet.Range("A1:A2").Select;
    // Insertion d'un  logo  en haut et a gauche de la feuille 
    // ce logo est dans le meme dossier que la page courante
    var chemin=document.referrer;// on récupère le chemin d'accés au la page courante et son nom
    chemin=chemin.substring(0,chemin.lastIndexOf("/")+1); // on ne garde que le chemin 
    xlSheet.Pictures.Insert (chemin +"votrelogo.jpg");
    // on modifie la taille du logo
    xlSheet.Pictures.ShapeRange.LockAspectRatio = true;
    xlSheet.Pictures.ShapeRange.Height = 27.75;
    xlSheet.Pictures.ShapeRange.Width = 110.25;
    xlSheet.Pictures.ShapeRange.Rotation = "0";
    // on le place précisement à 9 points du haut gauche
    xlSheet.Pictures.ShapeRange.Top=xlSheet.Pictures.ShapeRange.Top+9;
   // et 39 du coté gauche    xlSheet.Pictures.ShapeRange.Left=xlSheet.Pictures.ShapeRange.Left+39;  
    
    // Recup des textes d'entete du tableau HTML pour les mettres dans les cellules
    xlSheet.Cells(1, 4).Value = data[1].innerText;;
    xlSheet.Cells(1, 4).VerticalAlignment = xlVAlignCenter;// alignement centrer vertical dans la cellule
    xlSheet.Cells(1, 4).HorizontalAlignment = xlHAlignRight; // et centrer horizontal
    xlSheet.Cells(1, 4).Font.Size = 9; // taille de police 9
    xlSheet.Cells(1, 4).Font.Bold = "False" ;// pas de mise en gras
      
    xlSheet.Cells(2, 4).Value = data[3].innerText;
    xlSheet.Cells(2, 4).VerticalAlignment = xlVAlignCenter;
    xlSheet.Cells(2, 4).HorizontalAlignment = xlHAlignCenter;
    xlSheet.Cells(2, 4).Interior.ColorIndex = 5;
    xlSheet.Cells(2, 4).Interior.Pattern = xlSolid ;
    xlSheet.Cells(2, 4).Font.ColorIndex = 2;
    xlSheet.Cells(2, 4).Font.Size = 12;
    xlSheet.Cells(2, 4).Font.Bold = "True";
        
        
    xlSheet.Range("B1:D1").Mergecells=true;
    xlSheet.Range("B2:C2").Mergecells=true;
    xlSheet.Cells(3, 1).Value = data[4].innerText;
    xlSheet.Cells(3, 1).Font.Bold = "True";
     
    xlSheet.Cells(3, 2).Value = data[5].innerText;
    xlSheet.Cells(3, 2).Font.Bold = "True" ;
    xlSheet.Cells(3, 2).Interior.ColorIndex = 6;
    xlSheet.Cells(3, 2).Interior.Pattern = xlSolid ;
      
        
    
    xlSheet.Columns("B").WrapText = "True";
    xlSheet.Columns("B").VerticalAlignment = xlVAlignCenter;
       
        
    xlSheet.Cells(3, 3).Value = data[6].innerText;;
    xlSheet.Cells(3, 3).Font.Bold = "True";
    xlSheet.Cells(3, 3).Interior.ColorIndex = 6 ;
    xlSheet.Cells(3, 3).Interior.Pattern = xlSolid ;
        
        
    xlSheet.Cells(2, 2).Value = data[2].innerText;;
    xlSheet.Cells(2, 2).VerticalAlignment = xlVAlignCenter;
    xlSheet.Cells(2, 2).Font.Bold = "False";
     
        
    xlSheet.Columns("A").ColumnWidth = 50;
    xlSheet.Columns("A").VerticalAlignment = xlVAlignCenter;
      
        
    xlSheet.Columns("B").ColumnWidth = 15;
    xlSheet.Columns("B").VerticalAlignment = xlVAlignCenter;
    xlSheet.Columns("B").HorizontalAlignment = xlHAlignCenter;
        
    xlSheet.Columns("C").ColumnWidth = 15 ;
    xlSheet.Columns("C").VerticalAlignment = xlVAlignCenter;
    xlSheet.Columns("C").HorizontalAlignment = xlHAlignCenter;
    xlSheet.Columns("C").WrapText = "True";
        
            
       
    xlSheet.Columns("D").VerticalAlignment = xlVAlignTop;
    xlSheet.Columns("D").ColumnWidth = 50 ;
    xlSheet.Columns("D").WrapText = "True";
    
        
    xlSheet.Cells(3, 4).Value = data[7].innerText;
    xlSheet.Cells(3, 4).Font.Bold = "True" ;
    xlSheet.Cells(3, 4).VerticalAlignment = xlVAlignCenter;
    xlSheet.Cells(3, 4).HorizontalAlignment = xlHAlignCenter;
    xlSheet.Cells(3, 4).Interior.ColorIndex = 6;
    xlSheet.Cells(3, 4).Interior.Pattern = xlSolid;
      
  			
			//Parcourt du tableau pour compléter les cellules
			var d = 8;
			for (r=3;r<rows.length;r++) { // début en ligne 3 - a cause de l'entete du tableau    
				for (c=1;c<=4;c++) { // parcours des colonnes
                                  var Maligne= rows[r].className;
				  var Num_ligne=r+1;
                                  // mise en forme de la ligne en fonction de la classe de la ligne
				  if ((Maligne=="ligne_ge") || (Maligne=="ligne_obs") || (Maligne=="ligne_obs_droite") ) {
				         xlSheet.Range("a" + Num_ligne + ":" + "d" + Num_ligne).Mergecells=true;
                 xlSheet.Cells(Num_ligne, 1).value = data[d].innerText;
                 xlSheet.Cells(Num_ligne, 1).HorizontalAlignment = xlHAlignRight;
                  if (Maligne=="ligne_ge") {
                      xlSheet.Cells(Num_ligne, 1).HorizontalAlignment = xlHAlignLeft;
                      xlSheet.Cells(Num_ligne, 1).Font.ColorIndex = 2;
                      xlSheet.Cells(Num_ligne, 1).Font.Size = 12;
                      xlSheet.Cells(Num_ligne, 1).Font.Bold = "False";
                      xlSheet.Range("a" + Num_ligne + ":" + "d" + Num_ligne).Interior.ColorIndex = 3;
                      xlSheet.Range("a" + Num_ligne + ":" + "d" + Num_ligne).Interior.Pattern = xlSolid;
                  } 
                  if (Maligne=="ligne_obs") {
                      xlSheet.Cells(Num_ligne, 1).VerticalAlignment = xlVAlignTop;
                      xlSheet.Cells(Num_ligne, 1).HorizontalAlignment = xlHAlignLeft;
                      xlSheet.Cells(Num_ligne, 1).WrapText = "True";
                      xlSheet.Cells(Num_ligne, 1).RowHeight = 90;
                      xlSheet.Cells(Num_ligne, 1).Font.Name = "Arial";
                      xlSheet.Cells(Num_ligne, 1).Font.Size = 8;
                      xlSheet.Cells(Num_ligne, 1).Font.Italic = "True";               
                  }
                  if (Maligne=="ligne_obs_droite") {
                    xlSheet.Cells(Num_ligne, 1).HorizontalAlignment = xlHAlignRight;
                    xlSheet.Cells(Num_ligne, 1).Font.Name = "Arial";
                    xlSheet.Cells(Num_ligne, 1).Font.Size = 8;
                    xlSheet.Cells(Num_ligne, 1).Font.Italic = "True";
                  }
                  d=d+1;
                 break;
          } else {
					       xlSheet.cells(Num_ligne,c).value = data[d].innerText;
					}
					d = d + 1;
				}
			}
			// Encadrement du tableau
		  xlSheet.Range("a1:d" + Num_ligne).Borders(xlTop).LineStyle = xlContinuous;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlTop).Weight = xlThin;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlBottom).LineStyle = xlContinuous;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlBottom).Weight = xlThin;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlLeft).LineStyle = xlContinuous;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlLeft).Weight = xlThin;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlRight).LineStyle = xlContinuous;
      xlSheet.Range("a1:d" + Num_ligne).Borders(xlRight).Weight = xlThin; 
        
        // parametrage de la mise en page
        xlSheet.PageSetup.PrintTitleRows = "";
        xlSheet.PageSetup.PrintTitleColumns = "";
        xlSheet.PageSetup.CenterHorizontally = 1;
        xlSheet.PageSetup.CenterVertically = 1;
        xlSheet.PageSetup.Orientation = xlPortrait;
         xlSheet.PageSetup.CenterHeader = "";
        xlSheet.PageSetup.CenterFooter = "";
        xlSheet.PageSetup.RightFooter = "";
        xlSheet.PageSetup.LeftMargin = xlApp.InchesToPoints(0);
        xlSheet.PageSetup.RightMargin = xlApp.InchesToPoints(0);
        xlSheet.PageSetup.TopMargin = xlApp.InchesToPoints(0.5);
        xlSheet.PageSetup.BottomMargin = xlApp.InchesToPoints(0.5);
        xlSheet.PageSetup.HeaderMargin = xlApp.InchesToPoints(0.25);
        xlSheet.PageSetup.FooterMargin = xlApp.InchesToPoints(0.25);
        xlSheet.PageSetup.PrintArea = "A1:D" + Num_ligne;
        // pour ajuster sur une seule page en hauteur et en largeur
        xlSheet.PageSetup.Zoom = false;
        xlSheet.PageSetup.FitToPagesWide = 1;
        xlSheet.PageSetup.FitToPagesTall = 1;
         //Impression sur l'imprimante par défaut
        xlSheet.PrintOut ;
        // On fait croire que l'on a sauvegardé le tableau
        // et éviter le message de demande de sauvegarde
        xlBook.Saved=true;
						
	// Nettoyage des variable
	CollectGarbage();
	//Sortie de Excel
	xlApp.Quit();
		
}
</script>
</head>
<body>
<button  onclick='Print_xl();'>Impression</button>&nbsp;<br /><br /><Table id='tableau' border='1px'>
<Tr>
<Td  rowspan='2'><img  border='0' width='220' height='55' src='logo.jpg'><Td colspan='3' align=Right><Font size='1'>du texte</font></Td></TR>
<TR  class='ligne_titre1'><Td colspan='2' align=center>Titre</Td><Td  bgcolor='#0000FF'><B><Center><font color='#FFFFFF'><font size='4'>Titre</font></Center></B></Td></Tr>
<TR class='ligne_titre2' align=center>
<TD> Titre </TD>
<TD bgcolor='yellow'> Titre</TD>
<TD bgcolor='yellow'> Titre </TD>
<TD bgcolor='yellow'> Titre </TD>
</TR>
<TR class='ligne_ge'><TD colspan='4' bgcolor='red'><font color='#FFFFFF'><Font face='Arial'>Regroupement 1</font></TD></TR>
<TR class='ligne_acte'><TD>
Ligne 1</td><TD align=center >yzeuia &nbsp;</td>
<TD align=center >kdflmk &nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>Ligne2</td><TD align=center >kmdfksm &nbsp;</td>
<TD align=center >dkfjsl&nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>Ligne3/td><TD align=center >dlmskflm &nbsp;</td>
<TD align=center >dslmfksdml&nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>ligne4</td><TD align=center > &nbsp;</td>
<TD align=center >jdlk &nbsp;</td>
<TD align=Left >kmlgkmfdkgmdfkgmkgmkd  kgdfmlkg mlkkg mk mk dmlkd gkmdflkgm k &nbsp;</td>
</TR>
<TR class='ligne_ge'><TD colspan='4' bgcolor='red'><font color='#FFFFFF'><Font face='Arial'>Autre regrgoupement</font></TD></TR>
<TR class='ligne_acte'><TD>
Ligne 1</td><TD align=center >70% &nbsp;</td>
<TD align=center >kmdflkml &nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>Ligne 2</td><TD align=center >mdslfkmsdl&nbsp;</td>
<TD align=center >flmsdkmlkf&nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>Ligne 3</td><TD align=center >mdlskfml &nbsp;</td>
<TD align=center >dlkjslkd &nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<TR class='ligne_acte'><TD>Ligne4</td><TD align=center >kdfmsl &nbsp;</td>
<TD align=center >sdfdf &nbsp;</td>
<TD align=Left > &nbsp;</td>
</TR>
<Tr class='ligne_obs_droite'><Td colspan='4' align='right'><p style='margin-top: 0; margin-bottom: 0'>du texte encore0</td></Tr>
<Tr class='ligne_obs'><Td colspan='4'><p style='margin-top: 0; margin-bottom: 0'>et enfin du texte <B></p></td></Tr>
</TABLE><BR>

</body>

</html>

Conclusion :


Voilà amusez vous bien avec EXCEL et JAVA.

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.