繁体   English   中英

将Excel工作表导入DataGridView C#

[英]Import Excel Sheet to DataGridView c#

我使用的是Visual Studio2010。使用OleDB,如何将Excel表格的选定列和行导入到datagridView1 假设我的行和列从B13开始并获得至少B13的20行。

有人有示例代码或链接可以帮助我做到这一点吗? 非常感谢!

您可以通过以下命令执行此操作:

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

来源: 在C#中使用OLEDB从Excel中选择单元格地址

完整代码在这里:

        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");

如果要将Excel文件的列导入到可用的datagridview中的空列。

例如:您具有如下datagridview,并且您想读取excel文件并导入到“类”列中

在此处输入图片说明

在此处输入图片说明

假设您想将Excel文件的范围从A1到A11的数据添加到datagridview中的“类”列(第二列)

            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());
            }
        }

这是输出:

在此处输入图片说明

“如果excel中的列类有一个空行怎么办?我想导入A1-A10,但是我的excel中的类列只有a1-a5,那我也可以在不超出范围的情况下获得空列吗?因为我遇到错误。我尝试仅在excel的Class列中放入1个数据,只是为了放入A1并仍然在查询字符串constr时得到A1-A10。”

->如您在下图中所看到的,我尝试仅在excel文件的类列中放入1个数据“ A1”。 当我将此excel文件导入datagridview时,我不会遇到任何超出范围的异常。

在此处输入图片说明

“或者只有iif在datagridView中有2行,而在excel中有5行,如何仅导入2个?所以如果我再添加1行并导入,它将在excel中导入3行。这有可能吗?”

->是的,这是可能的。 首先,您需要确定需要添加到datagridview的行数。

例如:您的datagridview有2行,但是您的excel文件有5行

->在导入之前,您需要向datagridview添加3行。

将突出显示区域中的代码行添加到您的代码中。

在此处输入图片说明

不要忘记将“数据”定义为全局而不是局部。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM