通过OpenFileDialog从DataGridView中加载的文件中的C#Update列中的Excel中的C#更新列,并从ComboBox中选择一个值

时间:2019-01-24 10:43:04

标签: c# winforms datagridview openfiledialog

我有一个小表格,其中有2个ButtonsBrowseupdateExcel),一个ComboBoxcomboBox1)和一个DataGridViewdataGridView1

第一个按钮使您可以选择一个Excel文件,然后将其加载到DataGridView中:

private void Browse_Click(object sender, EventArgs e)
    {

        OpenFileDialog op = new OpenFileDialog();
        op.InitialDirectory = @"C:\";
        op.Title = "Browse Excel Files";
        op.CheckFileExists = true;
        op.CheckPathExists = true;
        op.DefaultExt = "xls";
        op.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm;*.csv";
        op.FilterIndex = 2;
        op.RestoreDirectory = true;
        op.ReadOnlyChecked = true;
        op.ShowReadOnly = true;

        if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            if (File.Exists(op.FileName))
            {
                string[] Arr = null;
                Arr = op.FileName.Split('.');
                if (Arr.Length > 0)
                {
                    if (Arr[Arr.Length - 1] == "xls")
                        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                        op.FileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
                }
                else if (Arr[Arr.Length - 1] == "xlsx")
                {
                    sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + op.FileName + ";Extended Properties='Excel 12.0 Xml;HDR=YES';";
                }
            }
            FillData();
        }
    }

这也使用以下代码:

    public string sConnectionString;
    private void FillData()
    {
        if (sConnectionString.Length > 0)
        {
            OleDbConnection cn = new OleDbConnection(sConnectionString);
            {
                cn.Open();
                DataTable dt = new DataTable();
                OleDbDataAdapter Adpt = new OleDbDataAdapter("select * from [sheet1$]", cn);
                Adpt.Fill(dt);
                dataGridView1.DataSource = dt;
            }
            try { }
            catch (Exception ex)
            {
            }
        }
    }

显示文件后,我将拥有一个ComboBoxcomboBox1),该文件具有可以选择的静态值。

我要执行的操作是在另一个按钮(updateExcel)上,该按钮将使用您在ComboBox中选择的值,然后替换C列中的所有值。

当前使用情况:

using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System;
using System.ComponentModel;
using System.Data;

例如:

如果我的Excel文件是:

a   b   c   d   e   f
aaa bbb ccc ddd eee fff
ggg hhh iii jjj kkk lll
mmm nnn ooo ppp qqq rrr

然后从XXX中选择ComboBox,我希望输出为:

a   b   c   d   e   f
aaa bbb XXX ddd eee fff
ggg hhh XXX jjj kkk lll
mmm nnn XXX ppp qqq rrr

1 个答案:

答案 0 :(得分:0)

我通过使用以下代码解决了这个问题:

ValueError: dimensions or multi-index levels ['a'] do not exist