C# 在c中更改excel文件的单元格值?

C# 在c中更改excel文件的单元格值?,c#,excel,C#,Excel,我有excel文件,并在c windows应用程序中加载 我想更改excel单元格中的值,例如更改单元格a10中的值并保存文件 excel文件包含多个工作表 这方面有什么帮助吗 var ds = new DataSet(); ds = Parse(fileName); static DataSet Parse(string fileName) { string connectionString = string.Format("p

我有excel文件,并在c windows应用程序中加载

我想更改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;
        }
    }

要指定图纸是否有标题行,请修改连接字符串以指定HDR值。有关更多信息,请参阅

如果图纸有标题行,则可以按标题引用列

如果图纸没有标题行,请使用F1、F2、F3。。。。Fn其中F1是第一个选定列。如果没有指定起始位置,则A、B、C列对应于F1、F2、F3等

e、 g

现在,一旦您知道如何引用这些列,rest应该很容易。创建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处理数据集和数据适配器,但从逻辑上讲,这也应该有效,因为最终它们都会深入到命令对象。

向我们展示您的代码和失败的地方。现在所有excel文件都在ds中,那么如何获取excel单元格名称excel工作表是否有标题行?
UPDATE [Sheet1$A1:A1] SET F1='TestValue1'          <-- trick to update only one cell

UPDATE [Sheet1$] SET F1='TestValue1', F2 = 'some value 2' WHERE WhateverCondition