C # Обновление столбца в Excel из файла, загруженного в DataGridView через OpenFileDialog, со значением, выбранным в ComboBox - PullRequest
0 голосов
/ 24 января 2019

У меня есть маленькая форма, которая имеет 2 Buttons (Browse & updateExcel), ComboBox (comboBox1) и DataGridView (dataGridView1)

.Первая кнопка позволяет выбрать файл 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)
            {
            }
        }
    }

После отображения файлаУ меня есть ComboBox (comboBox1), в котором установлены статические значения, которые можно выбрать.

Я пытаюсь сделать это на другой кнопке (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 голосов
/ 24 января 2019

Я решил это, используя следующий код:

    private void updateExcel_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.RowCount - 1; i++)
        {
            dataGridView1[2, i].Value = ConsigneeCombo.Text;
        }
    }
...