Estoy usando Visual Studio 2010. Usando OleDB, ¿Cómo importar columnas seleccionadas y la hoja Filas de Excel a mi datagridView1? Supongamos que mis Filas y Columnas comienzan en B13 y obtienen al menos 20 filas de mi B13.

¿Alguien tiene un código de ejemplo o un enlace que pueda ayudarme a hacer esto? ¡Muchas gracias!

-1
Michael 17 sep. 2018 a las 12:37

4 respuestas

La mejor respuesta

Puede hacer esto con este comando:

"SELECT * FROM [<SheetName>$<optional range>]";
//Ex : OleDbCommand OleConnection = new OleDbCommand("SELECT * FROM [Sheet1$B13:B33]", Con);

Fuente: Seleccione la dirección de la celda de Excel usando OLEDB en C #

Código completo aquí:

        try
        {
            OpenFileDialog dlg_im = new OpenFileDialog();
            dlg_im.Filter = "Excel File|*.xls;*.xlsx;*.xlsm";
            //dlg_im.Filter = "Excel File|*.xlsx";

            if (dlg_im.ShowDialog() == DialogResult.OK)
            {
                dataGridView1.Rows.Clear();
                textBox1.Text = dlg_im.FileName;

                string name = "Sheet1";
                string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + textBox1.Text + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";

                OleDbConnection Con = new OleDbConnection(constr);
                OleDbCommand OleConnection = new OleDbCommand("SELECT * FROM [Sheet1$B13:B33]", Con);
                Con.Open();

                OleDbDataAdapter sda = new OleDbDataAdapter(OleConnection);
                DataTable data = new DataTable();
                sda.Fill(data);
                dataGridView1.DataSource = data;

                dataGridView1.ReadOnly = true;
                dataGridView1.Columns[0].Width = 320;
                dataGridView1.ClearSelection();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }


        MessageBox.Show("Done");
1
Nguyen Thanh Binh 17 sep. 2018 a las 11:00

"¿Qué pasa si la clase de columna en Excel tiene filas vacías? Quiero importar A1-A10 pero mi columna de clase en Excel solo tiene a1-a5 ¿No es posible que también pueda obtener columnas vacías sin salir de la Superación del rango? recibí un error. Intento poner solo 1 datos en la columna de la clase en Excel solo para poner A1 y aún obtener el A1-A10 en consulta de cadena de construcción ".

-> Como puede ver en la imagen a continuación, intenté poner solo 1 datos "A1" en la columna de clase en el archivo de Excel. Cuando importo este archivo de Excel a datagridview, no enfrento ninguna Excedencia fuera de rango.

enter image description here

0
Nguyen Thanh Binh 22 sep. 2018 a las 09:02

"O solo si tengo 2 filas en datagridView y 5 filas en Excel, ¿cómo importo solo 2? Entonces, si agrego 1 fila más e importo, importará 3 filas en Excel. ¿No es posible?"

-> Sí, esto es posible. En primer lugar, debe determinar cuántas filas debe agregar a datagridview.

Ej: su datagridview tiene 2 filas, pero su archivo Excel tiene 5 filas

-> Debe agregar 3 filas a datagridview antes de importar.

Agregue líneas de código en el área de iluminación a su código.

enter image description here

No olvide definir "datos" como globales en lugar de locales.

enter image description here

0
Nguyen Thanh Binh 22 sep. 2018 a las 09:36

En caso de que desee importar una columna de archivo de Excel a una columna vacía en la vista de cuadrícula de datos disponible.

Por ejemplo: tiene una vista de cuadrícula de datos como se muestra a continuación y desea leer el archivo de Excel e importarlo a la columna "Clase"

enter image description here

enter image description here

Supongamos que desea agregar datos del rango A1 a A11 del archivo de Excel a la columna "Clase" (segunda columna) en la vista de cuadrícula de datos

            private void button3_Click(object sender, EventArgs e)
            {
            try
            {
                OpenFileDialog dlg_im = new OpenFileDialog();
                dlg_im.Filter = "Excel File|*.xls;*.xlsx;*.xlsm";
                //dlg_im.Filter = "Excel File|*.xlsx";

                if (dlg_im.ShowDialog() == DialogResult.OK)
                {
                    textBox1.Text = dlg_im.FileName;

                    string name = "Sheet1";
                    string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + textBox1.Text + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";

                    OleDbConnection Con = new OleDbConnection(constr);
                    OleDbCommand OleConnection = new OleDbCommand("SELECT *FROM [Sheet1$A1:A11]", Con);
                    Con.Open();

                    OleDbDataAdapter sda = new OleDbDataAdapter(OleConnection);
                    DataTable data = new DataTable();
                    sda.Fill(data);


                    int i = 0;//The position of row in datagridview you want to start adding
                    foreach (DataRow dr in data.Rows)
                    {
                        Console.WriteLine(dr.ItemArray[0]);
                        dataGridView1.Rows[i].Cells[2].Value = dr.ItemArray[0];//Cells[2] --> Columns[2] --> Column Class
                        i++;
                    }

                    dataGridView1.ClearSelection();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

Esto es SALIDA:

enter image description here

1
Nguyen Thanh Binh 19 sep. 2018 a las 12:16