2013-11-27 5 views
1

У меня есть файл Excel и загружен в c# windows applciaction.Изменить значение ячейки файла excel в C#?

Я хочу изменить значение в ячейке 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 

Я никогда не пытался с Datasets и DataAdapters с первенствовать OLEDB, но логически, который должен работать тоже, потому что в конце концов они все бур вплоть до Command объекта.

Смежные вопросы