none
Tamaño de Columna RRS feed

  • Pregunta

  • Saludos,

         estoy exportando a excel desde un datagridview con c#,  lo hace bien, pero mis problemas son a la hora de dar formato a las columnas, con esto :

     Hoja_Trabajo.Cells[1, i + 1].Cells.Font.Bold = true;

    he logrado darle negrillas a las columnas, pero necesito ajustarle el tamaño a estas (columnas) de preferencia del mismo tamaño de la datagridview;  alguien me podria dar luces de como podria capturar ese tamaño en la datagridview origen y pasarlo para ajustarlo a las columnas de excel???

    por si acaso estoy usando :  Microsoft.Office.Interop.Excel y es WinForm;

    Gracias...

    lunes, 21 de enero de 2019 14:27

Respuestas

  • Saludos, ya encontré la manera:

    despues de guardar las cabeceras:

     for (int i = 0; i < DGV1.ColumnCount; i++)
                        {
                            Hoja_Trabajo.Cells[1, i + 1].Cells.Font.Bold = true;
                            Hoja_Trabajo.Cells[1, i + 1] = DGV1.Columns[i].HeaderText;
                         }

    y almacenar los Datos

    for (int i = 1; i < DGV1.Rows.Count; i++)
                            {
                            for (int j = 0; j < DGV1.Columns.Count; j++)
                            {
                                if ((DGV1.Rows[i].Cells[j].Value == null) == false)
                                {
                                    Hoja_Trabajo.Cells[i + 1, j + 1] = DGV1.Rows[i].Cells[j].Value.ToString();
                                }
                            }
                            porcentaje = (BarraProg.Value / BarraProg.Maximum) * 100;
                            BarraProg.Value = i;
                        }

    ojo :  BarraProg, es una barra de progreso.

    Antes de grabar, Debes Indicar:

    Hoja_Trabajo.UsedRange.Columns.AutoFit();

    esto es lo que permite que las ccolumnas de la Hoja_Trabajo, se auto ajusten al tamaño del texto.

    despues solo tienes que grabar

     Libro_Trabajo.SaveAs(fichero.FileName, Excel.XlFileFormat.xlWorkbookNormal);
                        Libro_Trabajo.Close();
                        aplicacion.Quit();
                        MessageBox.Show("Datos Exportados");
                        GC.Collect();
                        Application.Exit();

    Y Listo...


    martes, 22 de enero de 2019 12:53

Todas las respuestas

  • hola

    estas usando la libreria Interop de Office ?

    Hoja_Trabajo.Columns["A"].ColumnWidth = 18;

    el ancho se lo asignas a la columna

    Set Column Width in C# (Interop.Excel)

    How to properly set Column Width upon creating Excel file? (Column properties)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de enero de 2019 14:38
  • Vale, gracias, funciona, , pero eso me deja las columnas con un ancho es especifico, lo que necesito es capturar el ancho de la columna correspondiente en el datagridview para asi, pasarlo al ancho de la columna de la planilla excel, por que no todas las columnas tienen  el mismo ancho.
    lunes, 21 de enero de 2019 14:49
  • hola

    lo que necesito es capturar el ancho de la columna correspondiente en el datagridview para asi

    pero va a tener que iterar las columnas, usando

    foreach(var col in DataGridView1.Columns){
    
        int width = col.Width;
    
    }

    esto podrias hacerlo previo a iteras las rows, asi asignas los anchos de todas las columnas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de enero de 2019 15:36
  • Me envía un mensaje que indica, que el obj, no contiene una definición para Width, ni se encuentra ni un método de extensión 'whidth' que acepte un primer argumento del tipo 'Object' (falta alguna directiva USING o una referencia de ensamblado?)
    lunes, 21 de enero de 2019 17:51
  • Saludos, ya encontré la manera:

    despues de guardar las cabeceras:

     for (int i = 0; i < DGV1.ColumnCount; i++)
                        {
                            Hoja_Trabajo.Cells[1, i + 1].Cells.Font.Bold = true;
                            Hoja_Trabajo.Cells[1, i + 1] = DGV1.Columns[i].HeaderText;
                         }

    y almacenar los Datos

    for (int i = 1; i < DGV1.Rows.Count; i++)
                            {
                            for (int j = 0; j < DGV1.Columns.Count; j++)
                            {
                                if ((DGV1.Rows[i].Cells[j].Value == null) == false)
                                {
                                    Hoja_Trabajo.Cells[i + 1, j + 1] = DGV1.Rows[i].Cells[j].Value.ToString();
                                }
                            }
                            porcentaje = (BarraProg.Value / BarraProg.Maximum) * 100;
                            BarraProg.Value = i;
                        }

    ojo :  BarraProg, es una barra de progreso.

    Antes de grabar, Debes Indicar:

    Hoja_Trabajo.UsedRange.Columns.AutoFit();

    esto es lo que permite que las ccolumnas de la Hoja_Trabajo, se auto ajusten al tamaño del texto.

    despues solo tienes que grabar

     Libro_Trabajo.SaveAs(fichero.FileName, Excel.XlFileFormat.xlWorkbookNormal);
                        Libro_Trabajo.Close();
                        aplicacion.Quit();
                        MessageBox.Show("Datos Exportados");
                        GC.Collect();
                        Application.Exit();

    Y Listo...


    martes, 22 de enero de 2019 12:53