2013-11-27 79 views
1

我有excel文件,並加載在c#窗口applciaction。在c#中更改excel文件的單元格值?

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

向我們展示您的代碼以及您失敗的位置。 – Marco

+0

現在所有的excel文件都在ds中,所以如何獲得excel的單元格名稱 – user3041578

+0

您的Excel表格是否有標題行? –

回答

0

要指定您的工作表是否包含標題行,請修改連接字符串以指定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. 

現在,一旦你知道如何引用列,休息應該很容易。創建一個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 DataAdapters,但在邏輯上應該因爲最終他們都鑽到Command對象工作過。

相關問題