2012-08-13 120 views
0

我在寫一個C#應用程序,它可以從Excel表格中讀取。它讀取整個表格,但是我只想讀取一行中的特定單元格,然後移動到下一行並再次讀取該行中的特定單元格。沒有讀取或忽略的單元格對於Excel中的所有行都是相同的。下面是閱讀Excel中我的示例代碼:如何讀取Excel單元格並寫入數據庫

private void button1_Click(object sender, EventArgs e) 
     { 
      Excel.Application xlApp = new Excel.Application(); 
      Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:/test.xlsx"); 
      Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
      Excel.Range xlRange = xlWorksheet.UsedRange; 

      int rowCount = xlRange.Rows.Count; 
      int colCount = xlRange.Columns.Count; 
      for(int i=1; i <= rowCount; i++) 
       { 
        for(int j=1; j<=colCount; j++) 
         { 
          MessageBox.Show(xlRange.Cells[i,j].Value2.ToString()); 
         } 
       } 
     } 
+0

只需調整您的for循環中的i和j值以便只遍歷所需的單元格? – PoeHaH 2012-08-13 14:30:46

+0

@poehah謝謝PoeHaH。我怎麼做? – Sithelo 2012-08-14 13:11:03

+0

現在,您正在從第1行讀取rowcount和第1單元格到columncount。這意味着你正在閱讀每一行和每一個單元格。如果您想要讀取的單元格全部緊挨着彼此,您可以將第二個for循環更改爲:for(int j = 6; j <= 8; j ++),它將只讀取單元格6至8。如果您想要閱讀的單元格不在彼此旁邊,則使用此代碼將會更棘手 – PoeHaH 2012-08-15 06:01:09

回答

0

你可以使用,而不是Excel.Interop OLEDB。您的問題需要只讀單元格的值,從而更容易把您的Excel文件作爲數據表本身....

string fileName = @"C:\test.xlsx"; 
string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
          "Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0'", fileName); 
using(OleDbConnection cn = new OleDbConnection(connectionString)) 
{ 
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand("SELECT Column1, Column2, Column3 From [Sheet1$]", cn); 
    OleDbDataReader rd = cmd.ExecuteReader(); 
    while(rd.Read()) 
    { 
     Console.WriteLine("Loop"); 
     Console.WriteLine(rd.GetString(0)); 
     Console.WriteLine(rd.GetString(1)); 
     Console.WriteLine(rd.GetString(2)); 
     Console.WriteLine(); 
    } 
} 

有兩點要注意:

我使用ACE.OleDB因爲你的文件有XLSX擴展名
我假設您的文件在名爲Column1的第一行中有列標題。 etc ...

+0

我試過你的代碼。此刻,我收到錯誤'Microsoft.JET.OLEDB.12.0'提供程序未在本地計算機上註冊。 – Sithelo 2012-08-14 13:10:07

+0

這[問題和相對答案](http://stackoverflow.com/questions/238625/microsoftoft-ace-oledb-12-0-provider-is-not-registered),會給你很好的信息來分析這個問題相對於你的工作電腦。希望能幫助到你 – Steve 2012-08-14 13:20:25

相關問題