none
como mantengo el formato en Excel RRS feed

  • Pregunta

  • holas,

    mi situacion es la siguiente, estoy realizando una aplicacion web en la cual creo una tabla html y con esta generar un excel, el problema es que tengo una columna donde tengo un dato que es un string que representa un periodo, por ejemplo "09/10" y cuando lo exporto a excel en vez de dejar ese formato me pone "10-sep" (lo transforma en fecha). Lo mismo me sucede con los numeros, tengo que respetar el siguiente formato ejemplo "5.000,000" y excel me pone "5000".

    agradeceria su ayuda, muchas gracias

    martes, 14 de diciembre de 2010 14:42

Todas las respuestas

  • Puedes hacer: colocar una comilla simple como prefijo.  tucelda="='09/10"

    colocar la funcion string()...    tucelda="=string(09/10)"

    martes, 14 de diciembre de 2010 23:51
  • Lo mejor es generar la tabla con estilos de office, y modificar los tipos mime del response

    Te pego una clase que tengo para poder generar una Excel desde un DataTable

    Los estilos concretos los puedes obtener escribiendo una Excel y guardardandola como web

    saludos

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    /// <summary>
    /// Descripción breve de DataExporter
    /// </summary>
    public class DataExporter {
        private System.Collections.Generic.Dictionary<string, string> FileFormats;

        private bool _ExporFieldNames;
        public bool ExportFieldNames {
            get { return _ExporFieldNames; }
            set { _ExporFieldNames = value; }
        }
        private string _FileName;

        public string FileName {
            get { return _FileName; }
            set { _FileName = value; }
        }

        private string _Charset;
        public string Charset {
            get { return _Charset; }
            set { _Charset = value; }
        }
       
       
        public DataExporter() {
            FileFormats = new System.Collections.Generic.Dictionary<string, string>();
            FileFormats.Add("xls", "application/vnd.ms-excel");
            FileFormats.Add("doc", "application/msword");
            FileFormats.Add("txt", "text/plain");
            FileFormats.Add("csv", "text/plain");
            ExportFieldNames = true;
            FileName = "FileName";
            Charset = ""; //windows-1252"; //Ver http://www.intellidimension.com/default.rsp?topic=/pages/rdfgateway/reference/script/response_charset.rsp
        }

        protected void Export(HttpResponse Response, DataTable dt, string ExportFormat) {
            Response.Buffer = true;
            Response.Clear();
            Response.AppendHeader("content-disposition", String.Format("attachment;filename=\"{0}.{1}\"", FileName, ExportFormat));
            Response.Charset = Charset; 
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = FileFormats[ExportFormat];

            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

            System.Text.StringBuilder Styles = new System.Text.StringBuilder();
            Styles.AppendLine(@"<style>.mstext { mso-number-format:\@; } </style>");
            Styles.AppendLine(@"<style>.msdate { mso-number-format:\dd/mm/aa h:mm; } </style>");

            DataGrid Grid = new DataGrid();
            Grid.DataSource = dt;
            Grid.DataBind();
            if (ExportFormat == "xls")
                FormatExcelColumns(Grid, dt);
            Grid.ShowHeader = ExportFieldNames;
            Grid.RenderControl(htmlWrite);
            Response.Write(Styles.ToString());
            Response.Write(stringWrite.ToString());
            Response.End();
        }
        public void ExportToExcel(HttpResponse Response, DataTable dt) {
            Export(Response, dt, "xls");
        }
        public void ExportToWord(HttpResponse Response, DataTable dt) {
            Export(Response, dt, "doc");
        }
        public void ExportToText(HttpResponse Response, DataSet ds, char ColumnSeparator) {
        }
        public void ExportToCSV(HttpResponse Response, DataSet ds) {
        }

        private void FormatExcelColumns(DataGrid Grid, DataTable dt) {
            foreach (DataColumn c in dt.Columns) {
                if (c.DataType.Name == "String") {
                    for (int r = 0; r < dt.Rows.Count; r++)
                        Grid.Items[r].Cells[c.Ordinal].Attributes.Add("class", "mstext");
                }
                if (c.DataType.Name == "DateTime") {
                    for (int r = 0; r < dt.Rows.Count; r++)
                        Grid.Items[r].Cells[c.Ordinal].Attributes.Add("class", "msdate");
                }
                   
            }
        }

    }

    jueves, 13 de enero de 2011 11:24