[ADO.Net][Excell]Enregistrer DataTable en .xls grâce au Xml
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:
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:
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é!