none
exportar a excel con formato numerico en C# RRS feed

  • Pregunta

  • Estimados. tengo una grilla que me muestra la siguiente informacion.

    Nombre / apellido / abono

    jose       carrera     15.00

    luis         rojas        20.45

    y cuando trato de exportarlo a excel en la hoja del excel se me muestra lo siguiente

    Nombre / apellido / abono

    jose       carrera     15

    luis         rojas        20.45

    si se dan cuenta el formato de la columna abono no esta respetando los ceros.

    Este es el codigo que uso.

    if (dgvCatalog.DataSource != null)
                    {
                        SaveFileDialog fichero = new SaveFileDialog();
                        fichero.Filter = "Excel (*.xls)|*.xls";
                        if (fichero.ShowDialog() == DialogResult.OK)
                        {
                            Microsoft.Office.Interop.Excel.Application aplicacion;
                            Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
                            Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
                            aplicacion = new Microsoft.Office.Interop.Excel.Application();
                            libros_trabajo = aplicacion.Workbooks.Add();
                            hoja_trabajo = (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1);
    
                            //exportar cabeceras dgvLog
                            for (int i = 1; i <= this.dgvCatalog.Columns.Count-1; i++)
                            {
                                hoja_trabajo.Cells[1, i] = this.dgvCatalog.Columns[i - 1].HeaderText;
                            
                            }
    
                            //Recorremos el DataGridView rellenando la hoja de trabajo con los datos
                            for (int i = 0; i < this.dgvCatalog.Rows.Count; i++)
                            {
                                for (int j = 0; j < this.dgvCatalog.Columns.Count-1; j++)
                                {
                                    hoja_trabajo.Cells[i + 2, j + 1] = this.dgvCatalog.Rows[i].Cells[j].Value.ToString();
                                }
                            }
    
                            libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
                            hoja_trabajo.Columns.AutoFit();
                            libros_trabajo.Close(true);
                            MessageBox.Show("Export is Successful");
                            aplicacion.Quit();
                        }
                    }

    De antemano gracias por su ayuda

    lunes, 16 de enero de 2017 21:33

Respuestas

  • Fíjate que le estás pasando al Excel el this.dgvCatalog.Rows[i].Cells[j].Value.ToString();
    El Value representa el Object que hay en el Cell, por lo que estás tomando un valor binario que NO TIENE FORMATO. Cuando le aplicas el ToString se le aplica el formato predeterminado, que omite los decimales cuando son cero. Esto tiene dos soluciones: la primera es que el formato lo apliques en el Excel (podrías incluso hacerlo remotamente mediante automatización OLE). La segunda es que en lugar de pasarle el ToString le apliques el formato. Una forma de hacerlo es poner un cast del object a Decimal y luego aplicar ToString("0.00"). Otra es usar el FormattedValue en lugar del Value, en cuyo caso toma el formato del Grid y ya no hay que hacer .ToString():

    hoja_trabajo.Cells[i + 2, j + 1] = this.dgvCatalog.Rows[i].Cells[j].FormattedValue;

    o bien:

    hoja_trabajo.Cells[i + 2, j + 1] = Convert.ToDecimal(this.dgvCatalog.Rows[i].Cells[j].Value).ToString("0.00");

    lunes, 16 de enero de 2017 23:03
    Moderador