none
Abrir y modificar un archivo de excel desde un datagridview c# RRS feed

  • Pregunta

  • Lo que debo de hacer es abrir mediante un openfiledialog un documento de excel el cual debo mostrarlo en un datagridview (hasta este momento si logro hacerlo). Luego de eso el datagridview debe de ser modificable (aún logro hacerlo) y finalmente en un botón debe de guardar el contenido nuevo de grid en el mismo documento y la misma hoja. Pero en si lo que no se como hacer es que si uno modifica una hoja a través del grid que se guarden los cambios en el mismo documento sin crear uno nuevo.Tienen alguna idea de como hacerlo? Me sería muy útil su ayuda :(.

    A continuación dejo el código que uso para abrir el documento y mostrarlo en el grid:

    using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Excel Workbook 97-2003|*.xls|Excel Workbook|*.xlsx", ValidateNames = true })
                {
                    // ofd.Filter = "Excel Workbook|*.xls;*.xlsx;*.xlsm";
                    {
                        if (ofd.ShowDialog() == DialogResult.OK)
                        {
                            //Read excel file
                            ruta2 = "";
                            FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
                            ofd.FileName = ruta2;
                            IExcelDataReader reader;
                            if (ofd.FilterIndex == 1)
                            {
                                reader = ExcelReaderFactory.CreateBinaryReader(fs);
                            }
                            else
    
    
                                reader = ExcelReaderFactory.CreateOpenXmlReader(fs);
    
                            reader.IsFirstRowAsColumnNames = true;
                            result = reader.AsDataSet();
                            comboBox1.Items.Clear();
                            //Add sheet to combobox
                            foreach (DataTable dt in result.Tables)
                                comboBox1.Items.Add(dt.TableName);
                            reader.Close();
                        }
                    }
                }

    martes, 18 de junio de 2019 21:50

Todas las respuestas

  • Hola ! Mira aca te dejo un codigo utilizando OleDB para llenar un DataGridView

    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Materias\Práctica Profesionalizante I\Guía de Trabajos Prácticos\04-Personas\Personas.xlsx;Extended Properties=Excel 12.0 Xml");
                try
                {
                    conn.Open();
                    OleDbCommand comando = new OleDbCommand("SELECT * FROM [Listado$]", conn);
                    IDataReader reader = comando.ExecuteReader();
                    while (reader.Read())
                    {
                        this.dgv.Rows.Add(string.Concat(reader["Nombre"].ToString()),
                                   reader["Documento"].ToString(),
                                   reader["Contrato"].ToString(),
                                   reader["Sueldo"].ToString());
                    }
                    conn.Close();
                }
                catch (Exception ex)
                {
                    conn.Close();
                    throw ex;
                }
    

    Y en tu gridview podes buscar las columnas, por ej: cuando encontres la columna ["Documento"], le asignas el dato deseado. Espero servirte de ayuda


    cervera

    • Propuesto como respuesta Carlos_Ruiz_M martes, 25 de junio de 2019 14:32
    miércoles, 19 de junio de 2019 2:11
  • Y si no te funciona el OleDB aca tenes el Interop

    if (!File.Exists(filePath))
                    return;
                Microsoft.Office.Interop.Excel.Application xlApp;
                Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
                Microsoft.Office.Interop.Excel.Range range;
                var misValue = Type.Missing;
    
                // abrir el documento
                xlApp = new Microsoft.Office.Interop.Excel.Application();
                xlWorkBook = xlApp.Workbooks.Open(filePath, misValue, misValue,
                    misValue, misValue, misValue, misValue, misValue, misValue,
                    misValue, misValue, misValue, misValue, misValue, misValue);
    
                // seleccion de la hoja de calculo
                xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
                // seleccion rango activo
                range = xlWorkSheet.UsedRange;
                // leer las celdas
                int rows = range.Rows.Count;
                int cols = range.Columns.Count;
    
                for (int row = 1; row <= rows; row++)
                    for (int col = 1; col <= cols; col++)
                    {
                        string str_value = (range.Cells[row, col] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
                        //llenar grilla
                    }
    
    


    cervera

    • Propuesto como respuesta Carlos_Ruiz_M martes, 25 de junio de 2019 14:32
    miércoles, 19 de junio de 2019 2:12