繁体   English   中英

如何从 C# 更新 Excel 工作表行

[英]How to update excel sheet row from C#

我很沮丧,因为我无法解决这个问题......

好吧,我一直在用 C# 制作桌面应用程序,我几乎完成了应用程序,但我有一个大问题。

我的应用程序导入了一个 Excel 工作簿,该工作簿具有一些显示在 Gridview 中的信息。 它工作正常,但我的应用程序更新或修改了 gridview 中显示的数据,只有一个名为 Balance 的列。

我想在我的 excel 工作簿中更新此列,就像 SQL 中的更新条件一样,例如,我将此信息导入到我的应用程序中。

Excel 工作簿

如果我在我的应用程序中修改某行,例如订单为“12345”的行,我想在我的 Excel 工作簿中更新该行的名为 Balance 的列。

我一直在尝试使用这段代码:

    string order = textBox1.Text;
    string balance = textBox2.Text;

    filePath = openFileDialog1.FileName;
    extension = Path.GetExtension(filePath);
    header = "Yes";
    OleDbConnection MyConnection = new OleDbConnection(conStr); ;
    OleDbCommand myCommand = new OleDbCommand();
    string sql = null;
    MyConnection.Open();
    myCommand.Connection = MyConnection;
    sql = "UPDATE [" + sheetName + "] SET [" + sheetName + "].[Order]=123 WHERE [" + sheetName + "].[Balance]=12313";
    myCommand.CommandText = sql;
    myCommand.ExecuteNonQuery();
    MyConnection.Close();

如果我调试代码,它是执行的句子,我认为它没问题,但它不起作用。

UPDATE ['12234$'] SET ['12234$'].[Order]=123 WHERE ['12234$'].[Balance]=12313

它给我这个错误:

Message=No value given for one or more required parameters.
  Source=Microsoft Access Database Engine

考虑改用 NuGet 包来处理 Excel。 EPPlus是一个很好的工具。

using (var package = new ExcelPackage(@"someFile.xlsx")
{
   var sheet = package.Workbook.Worksheets.First();
   sheet.Cells["E2"].Value = 12345.32M;
   package.Save();
}

Sql已经不行了,但是可以用Linq:

using (var package = new ExcelPackage(@"someFile.xlsx")
{
   var sheet = package.Workbook.Worksheets.First();
   int rowIndex = sheet.Cells["C2:C5"].First(x => int.Parse(x.Value.ToString()) == 12345).Start.Row;
   const int balanceColumnIndex = 5;
   sheet.Cells[rowIndex, balanceColumnIndex].Value = 12313M;
   package.Save();
}

在我的博客上写了一系列关于 EPPlus 的文章

这只是一个想法 - 但是您的类似 SQL 的字符串是否设置正确?

如果您尝试更新某个订单的余额,您会希望它包含在您的 SET 命令中。

所以,类似的东西......

UPDATE ['12234$'] SET ['12234$'].[Balance]=12313 WHERE ['12234$'].[Order]=12345

//尝试这个解决方案

        string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Directory.GetCurrentDirectory() + "/swtlist.xlsx;" +
                     @"Extended Properties='Excel 12.0;HDR=Yes;';Persist Security Info=False;";


        using (OleDbConnection connection = new OleDbConnection(connString))
        {
            connection.Open();
            try
            {
                DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                OleDbCommand cmd = new OleDbCommand("UPDATE  [Feuil1$]  SET d='yes' ", connection);

                  cmd.ExecuteNonQuery();
                connection.Close();


            }
            catch (Exception ex) { }
        }

暂无
暂无

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

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