<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>TeraBIThia : Excel</title><link>http://geeks.ms/blogs/crisfervil/archive/tags/Excel/default.aspx</link><description>Etiquetas: Excel</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>DataTable to Excel con un control DataGrid</title><link>http://geeks.ms/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-un-control-datagrid.aspx</link><pubDate>Mon, 23 Nov 2009 16:07:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:161092</guid><dc:creator>Cristhian Fernández</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/crisfervil/rsscomments.aspx?PostID=161092</wfw:commentRss><comments>http://geeks.ms/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-un-control-datagrid.aspx#comments</comments><description>&lt;p&gt;Dejo c&amp;oacute;digo con otra opci&amp;oacute;n para exportar datos de un &lt;a href="http://msdn.microsoft.com/es-es/library/system.data.datatable.aspx" target="_blank"&gt;DataTable&lt;/a&gt; a un archivo Excel.&lt;/p&gt;
&lt;p&gt;Resulta que el Excel es capaz de reconocer c&amp;oacute;digo html de una tabla, y eso es precisamente lo que genera el control &lt;a href="http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.datagrid.aspx" target="_blank"&gt;DataGrid&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Este m&amp;eacute;todo no me gusta demasiado porque implica referenciar el espacio de nombres &lt;a href="http://msdn.microsoft.com/es-es/library/system.web.aspx" target="_blank"&gt;System.Web&lt;/a&gt;, y si estamos en una aplicaci&amp;oacute;n de escritorio, no me parece demasiado elegante. Supongo que en una aplicaci&amp;oacute;n Web, se notar&amp;iacute;a menos, pero un control es para lo que es, y si empezamos a usar cosas para lo que no son es cuando aparecen los problemas.&lt;/p&gt;
&lt;p&gt;Esto mismo se podr&amp;iacute;a hacer usando simplemente un objeto &lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx/System.Web.UI.HtmlTextWriter" target="_blank"&gt;HtmlWriter&lt;/a&gt;, pero el c&amp;oacute;digo quedar&amp;iacute;a bastante m&amp;aacute;s complejo que este.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_08B70AE7.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_207363AF.png" border="0" height="481" width="756" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una de las ventajas de este m&amp;eacute;todo es la posibilidad de a&amp;ntilde;adir estilos din&amp;aacute;micamente, por ejemplo usando un fichero css como este:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_348F10E9.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_560E4078.png" border="0" height="364" width="228" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Habr&amp;iacute;a que a&amp;ntilde;adir unas cuantas l&amp;iacute;neas m&amp;aacute;s al m&amp;eacute;todo anterior, para inyectar el contenido del css al html generado.&lt;/p&gt;
&lt;p&gt;Esta alternativa abre la posibilidad de tener varios formatos de exportaci&amp;oacute;n, definidos en distintos archivos css, y un &amp;uacute;nico m&amp;eacute;todo para realizar la exportaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_139E2EF3.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_3061E6CC.png" border="0" height="889" width="763" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una de las desventajas de esta m&amp;eacute;todo podr&amp;iacute;a ser el rendimiento. El volumen de informaci&amp;oacute;n generado es bastante alto, y ante un n&amp;uacute;mero elevado de filas y de columnas, el rendimiento se resiente. &lt;/p&gt;
&lt;p&gt;Este ser&amp;iacute;a el contenido del texto generado, para un DataTable con dos filas y dos columnas&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_5AD3394B.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_534A5A8F.png" border="0" height="686" width="836" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Abri&amp;eacute;ndolo con el Excel:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_29004416.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_714D89E5.png" border="0" height="241" width="390" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;S&amp;eacute; que funciona con el Excel 2003 y posteriores, pero sospecho, aunque no estoy seguro, de que tambi&amp;eacute;n lo reconoce el Excel 2000.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-excelexportlib.aspx"&gt;Tambi&amp;eacute;n se puede exportar a Excel, usando el formato Office Xml.&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161092" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/snippets/default.aspx">snippets</category><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/Excel/default.aspx">Excel</category></item><item><title>DataTable To Excel con ExcelExportLib</title><link>http://geeks.ms/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-excelexportlib.aspx</link><pubDate>Mon, 23 Nov 2009 09:36:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:161063</guid><dc:creator>Cristhian Fernández</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/crisfervil/rsscomments.aspx?PostID=161063</wfw:commentRss><comments>http://geeks.ms/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-excelexportlib.aspx#comments</comments><description>&lt;p&gt;Dejo este snippet, por si a alguno le puede servir. &lt;/p&gt;  &lt;p&gt;Es una manera más de exportar un DataTable, o un DataSet a un fichero Excel, pero esta vez usando el formato Office Xml.&lt;/p&gt;  &lt;p&gt;Wikipedia: &lt;a title="http://es.wikipedia.org/wiki/Microsoft_Office_XML" href="http://es.wikipedia.org/wiki/Microsoft_Office_XML" target="_blank"&gt;http://es.wikipedia.org/wiki/Microsoft_Office_XML&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Los formatos &lt;b&gt;Microsoft Office XML&lt;/b&gt; (no confundir con &lt;a href="http://es.wikipedia.org/wiki/Office_Open_XML" target="_blank"&gt;Office Open XML&lt;/a&gt;) son formatos de documento basados en XML (o &lt;a href="http://es.wikipedia.org/wiki/XML_Schema" target="_blank"&gt;lenguajes de esquema XML&lt;/a&gt;) introducidos en versiones de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Office" target="_blank"&gt;Microsoft Office&lt;/a&gt; anteriores a &lt;a href="http://es.wikipedia.org/wiki/Office_2007" target="_blank"&gt;Office 2007&lt;/a&gt;. En Microsoft Office XP se introdujo un nuevo formato &lt;a href="http://es.wikipedia.org/wiki/XML" target="_blank"&gt;XML&lt;/a&gt; para almacenar hojas de cálculo de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Excel" target="_blank"&gt;Excel&lt;/a&gt; y Office 2003 añadió formatos basados en XML para documentos de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Word" target="_blank"&gt;Word&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Estos formatos fueron reemplazados por la especificación &lt;a href="http://es.wikipedia.org/wiki/Office_Open_XML" target="_blank"&gt;Office Open XML&lt;/a&gt; (ECMA-376) en &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Office_2007" target="_blank"&gt;Microsoft Office 2007&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;El formato Excel xml tiene más o menos la siguiente apariencia: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_6FEE8EB9.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="546" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_0CF9CE33.png" width="689" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una de las ventajas de este formato, es la posibilidad de incluir formatos (valga la redundancia), fórmulas, etc. y que son reconocidos desde la versión 2003. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_57839CBE.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="114" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_6E4574F8.png" width="270" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_097DCDFA.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="267" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_3458C2BD.png" width="822" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Más información acerca del formato: &lt;a title="http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx" href="http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una exportación sencilla, no tiene ninguna complicación, pero so quisiéramos añadir ciertas complejidades, hay mucho código que escribir.&lt;/p&gt;  &lt;p&gt;Por eso, me he apoyado en esta librería que proporciona un modelo de objetos bastante sencillo, que permite centrarse en la información a generar, y delegar el “renderizado” del documento xml.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://excelexportlib.codeplex.com/" href="http://excelexportlib.codeplex.com/" target="_blank"&gt;http://excelexportlib.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_438F2B8A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="216" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_62D4630E.png" width="843" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Traducción: ExcelExportLib es una librería de exportación simple que crea un archivo .xml. Este archivo puede ser abierto en Excel. Al contrario que los archivos &lt;a href="http://es.wikipedia.org/wiki/CSV" target="_blank"&gt;csv&lt;/a&gt;, este formato contiene información de formato. La principal ventaja del proyecto es que permite la exportación de datos en Excel sin necesidad de ejecutar Excel.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A mí lo que me gustó de la librería es lo sencillita que es. Simple, pero potente.&lt;/p&gt;  &lt;p&gt;Un ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_0DAF57D2.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="377" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_6EFAFE97.png" width="755" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bueno, y finalmente el snippet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_2331B88F.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="234" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_124D149F.png" width="525" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_3D943C57.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="641" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_2CB22918.png" width="656" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Por supuesto, al Excel generado se le pueden añadir todo tipo de formatos, fórmulas, totales, etc.&lt;/p&gt;  &lt;p&gt;Y allí donde ExcelExportLib no llegue, siempre se puede añadir funcionalidad propia. &lt;/p&gt;  &lt;p&gt;Normalmente para saber cómo se traduce a xml una característica del documento Excel, por ejemplo una fórmula, un formato, etc., se pueden consultar las especificaciones, pero lo más sencillo suele ser generar un documento con la características en cuestión, guardar el archivo en formato xml y ver el resultado.&lt;/p&gt;  &lt;p&gt;Por ejemplo, ¿cómo se especifica la característica de formato condicional?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_7BB2786A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="195" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_38D633F0.png" width="590" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Guardamos el documento en formato xml….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_23E7422E.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="424" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_73565526.png" width="744" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Y abrimos el resultado con un editor de texto, o uno xml.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_36C0E73A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="207" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_0869F23E.png" width="722" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PD: No suelo pegar el código, por un trauma personal. He sufrido el copy-pasteado de mucha gente, y la verdad es que no se lo deseo a nadie. Por eso pongo la imagen, y que cada uno escriba su propio código. Perdón por los inconvenientes ocasionados. ;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161063" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/snippets/default.aspx">snippets</category><category domain="http://geeks.ms/blogs/crisfervil/archive/tags/Excel/default.aspx">Excel</category></item></channel></rss>