Voilà, je ne sais pas si je suis au bon endroit, mais au lieu d'écrire un problème j'écris une solution que je pense la bienvenue.

c'est à dire transformer une DataTable en fichier xls.

j'ai beaucoup galéré avant de trouver un truc tout bête, passer par du XML.

c'est à dire : il faut d'abord écrire le fichier xsl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <HTML>
      <BODY>
           <table border="1" padding="0" border-spacing="0">
		<tr>
			  <xsl:for-each select="DataSet/DataTable[position()=1]/*">
				<th>
					<xsl:value-of select="name()" />
				</th>
				</xsl:for-each>
		</tr>
          <xsl:for-each select="DataSet/DataTable">
 
		<tr>
			<xsl:for-each select="*">
				<td>
		              <xsl:value-of select="."/>
				</td>
			</xsl:for-each>
		</tr>
 
          </xsl:for-each>
	</table>
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>
et ensuite il faut juste générer la DataTable en xml en lui appliquant le fichier xsl et en rennomant le XML en XLS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
/// <summary>
        /// Transforme une DataTable en fichier xls. Le fichier xsl doit être : ../Format.xsl
        /// </summary>
        /// <param name="DT">DataTable à exporter.</param>
        /// <param name="Path">Chemin de la sauvegarde.</param>
        /// <returns></returns>
        static public void DataTableToExcel(DataTable DT, string Path)
        {
            DT.TableName = "DataTable";
            DataSet Ds = new DataSet();
            Ds.DataSetName = "DataSet";
            Ds.Tables.Add(DT);
 
            System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(Path, System.Text.Encoding.Unicode);
            xtw.WriteProcessingInstruction("xml", "version='1.0'");
            xtw.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='../Format.xsl'");
            Ds.WriteXml(xtw);
        }
on peut à priori faire pareil en pdf, il faut juste lui appliqué du xsl-fo au lieu du xslt.

Mais je n'ai pas encore essayé!