2013-04-22 355 views
4

如何遍歷Excel工作簿和多個工作表只從提示列「C」,「E」&「F」中提取數據?如何遍歷Excel工作表只提取特定列中的數據

這裏是我迄今爲止代碼:

public static string ExtractData(string filePath) 
    { 
     Excel.Application excelApp = new Excel.Application(); 
     Excel.Workbook workBook = excelApp.Workbooks.Open(filePath); 

     string data = string.Empty; 

     int i = 0; 
     foreach (Excel.Worksheet sheet in workBook.Worksheets) 
     { 
      data += "******* Sheet " + i++.ToString() + " ********\n"; 

      //foreach (Excel.Range row in sheet.UsedRange.Rows) 
      //{ 
      // data += row.Range["C"].Value.ToString(); 
      //} 

      foreach (Excel.Range row in sheet.UsedRange.Rows) 
      { 
       foreach (Excel.Range cell in row.Columns) 
       { 
        data += cell.Value + " "; 
       } 
       data += "\n"; 
      } 
     } 

     excelApp.Quit(); 

     return data; 
    } 

非常感謝您的寶貴時間,任何幫助表示讚賞。

回答

0

你可以使用這樣的事情來獲得C列,例如:

var numberOfRows = sheet.UsedRange.Columns[3, Type.Missing].Rows.Count; 
var values = sheet.Range["C1:C" + numberOfRows].Value2; 

numberOfRows持有在工作表的行數(我認爲它不會在頂部壽跳過空白行,不當然)。之後,您選擇從C1到CN的範圍,並獲取包含這些值的Value2。請注意,values數組實際上是一個二維數組。現在,您可以輕鬆地做一個for循環來獲取項目:

for (int i = 1; i <= values.Length; i++){ 
    sb.Append(values[i, 1] + " "); 
} 

這可能的情況下,列進行優化,是彼此相鄰等,但上面的代碼應該讓你開始。

+0

'sheet.UsedRange.Columns [3,Type.Missing] .Rows.Count;'我不明白'.Rows'作爲一個選項...只是'的ToString() 「任何想法爲什麼以及如何解決它? – Si8 2016-12-20 18:06:49

7

編輯你的方法,這裏的東西應該做你要找的內容:

public static string ExtractData(string filePath) 
{ 
    Excel.Application excelApp = new Excel.Application(); 
    Excel.Workbook workBook = excelApp.Workbooks.Open(filePath); 
    int[] Cols = { 3, 5, 6 }; //Columns to loop 
       //C, E, F 
    string data = string.Empty; 

    int i = 0; 
    foreach (Excel.Worksheet sheet in workBook.Worksheets) 
    { 
     data += "******* Sheet " + i++.ToString() + " ********\n"; 

     foreach (Excel.Range row in sheet.UsedRange.Rows) 
     { 
      foreach (int c in Cols) //changed here to loop through columns 
      { 
       data += sheet.Cells[row.Row, c].Value2.ToString() + " "; 
      } 
      data += "\n"; 
     } 
    } 

    excelApp.Quit(); 

    return data; 
} 

我創建了一個int數組,表示你想這列從閱讀,然後在每一行我們只是遍歷數組。

HTH, ž