如何从C#中更新Excel表格行

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

那么,我一直在C#中的桌面应用程序,我几乎完成的应用程序,但我有一个大问题。

我的应用程序导入一个Excel工作簿,它有一些GridView中显示的信息。 它工作正常,但我的应用程序更新或修改GridView中显示的数据,只有一列称为平衡。

我想在我的Excel工作簿中更新这个列,就像在SQL中的更新条件,例如我有这个信息被导入到我的应用程序。

Excel工作簿

如果我在我的应用程序中修改了一些行,例如具有“12345”顺序的行,我想在我的Excel工作簿中更新该行的“平衡”列。

我一直在尝试这个代码:

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

而如果我debugging代码,这是执行的句子,我认为这是好的,但它不起作用。

 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 

这只是一个想法 – 但是你的SQL类似的string设置正确吗?

如果您尝试更新某个订单的余额,则需要将其置于SET命令中。

所以,沿着…的方向

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

考虑使用NuGet包来处理Excels。 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的系列文章 。