改变Excel文件在C#中的单元格值?

我有Excel文件,并加载在c#窗口applciaction。

我想改变Excel单元格中的值,例如更改单元格a10中的值并保存文件。

Excel文件包含多个表单。

在这方面有什么帮助?

 var ds = new DataSet(); ds = Parse(fileName); static DataSet Parse(string fileName) { string connectionString = string.Format("provider=Microsoft.Jet.OLEDB.4.0; data source={0};Extended Properties=Excel 8.0;", fileName); DataSet data = new DataSet(); foreach (var sheetName in GetExcelSheetNames(connectionString)) { using (OleDbConnection con = new OleDbConnection(connectionString)) { var dataTable = new DataTable(); string query = string.Format("SELECT * FROM [{0}]", sheetName); con.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(query, con); adapter.Fill(dataTable); data.Tables.Add(dataTable); } } return data; } static string[] GetExcelSheetNames(string connectionString) { OleDbConnection con = null; DataTable dt = null; con = new OleDbConnection(connectionString); con.Open(); dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) { return null; } String[] excelSheetNames = new String[dt.Rows.Count]; int i = 0; foreach (DataRow row in dt.Rows) { excelSheetNames[i] = row["TABLE_NAME"].ToString(); i++; } return excelSheetNames; } } 

要指定您的工作表是否包含标题行,请修改连接string以指定HDR值。 有关更多信息,请参阅http://www.connectionstrings.com/excel/

如果您的工作表有一个标题行,则可以通过标题引用这些列。

如果您的工作表没有标题行,请使用F1,F2,F3 …. Fn,其中F1是第一个选定的列。 如果您不指定从哪里开始,那么列A,B,C对应于F1,F2,F3等。

例如

 SELECT * FROM [Sheet1$] <-- Column A=F1, B=F2 etc. SELECT * FROM [Sheet1$B1:Z100] <-- Column B=F1, C=F2 etc. 

现在,一旦你知道如何参考列,rest应该很容易。 创build一个OledbCommand对象并执行你的命令。

 UPDATE [Sheet1$A1:A1] SET F1='TestValue1' <-- trick to update only one cell UPDATE [Sheet1$] SET F1='TestValue1', F2 = 'some value 2' WHERE WhateverCondition 

我从来没有用excel oledb尝试过Datasets和DataAdapter,但从逻辑上讲,这也应该起作用,因为最终他们都钻取到Command对象。