代码之家  ›  专栏  ›  技术社区  ›  Matt

C#编辑后保存DataGridView(覆盖导入的Excel文件)

  •  0
  • Matt  · 技术社区  · 7 年前

    我有一张小表格,上面有3个 Buttons ( Browse updateExcel & saveExcel ComboBox ( comboBox1 )和 DataGridView ( dataGridView1

    第一个按钮用于选择Excel文件,然后将该文件加载到 :

    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)
                {
                }
            }
        }
    

    然后,在从 然后可以更新 数据表格控件 通过单击 使用此代码的按钮:

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

    保存Excel )它用一个 Are you sure you want to save? Yes No 标准窗口对话框。

    SaveFileDialogue ( saveFileDialog1

        private void saveExcel_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.InitialDirectory = @"C:\";
            saveFileDialog1.Title = "Save Excel File";
            saveFileDialog1.DefaultExt = "xls";
            saveFileDialog1.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm;*.csv";
            saveFileDialog1.FilterIndex = 2;
            saveFileDialog1.ShowDialog();
    
            if (saveFileDialog1.FileName != "")
            {
                System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile();
                fs.Close();
            }
        }
    

    但这不起作用,因为它试图将文件保存为新文件(使用新的选项卡名称等),并且实际上无法识别文件类型。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Matt    7 年前

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

        private void saveExcel_Click(object sender, EventArgs e)
        {
    
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.InitialDirectory = @"C:\";
            sfd.Title = "Save Excel Files";
            sfd.CheckPathExists = true;
            sfd.DefaultExt = "xls";
            sfd.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm;*.csv";
            sfd.FileName = "*.csv";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                ToCsV(dataGridView1, sfd.FileName);
            }
        }