2016-04-28 82 views
0

SO我有一個範圍,我循環,然後將值添加到列表。我想跳過第一個值,因爲它是一個標題。我怎麼能這樣做呢?因爲它代表,我將所有的值跳過列範圍的第一個值並添加到列表

{ 
     var cellValues = new List<string>(); 
     //var rowsCount = worksheet.UsedRange.Rows.Count; 
     var columnRange = worksheet.UsedRange.Columns[1]; 

     foreach (var item in columnRange) 
     { 
      foreach (var cellValue in item.Value) 
      { 

       cellValues.Add(cellValue.ToString()); 

      } 
     } 

     return cellValues; 
    } 

回答

2

可以使用for循環,而不是foreach:如白木提到

for (int a = 1; a < columnRange.Count; a++) 
    { 
     for (int b = 0; b < columnRange[a].Value.Count; b++) 
     { 
      cellValues.Add(columnRange[a].Value[b].ToString()); 

     } 
    } 

 var cellValues = new List<string>(); 
     //var rowsCount = worksheet.UsedRange.Rows.Count; 
     var columnRange = worksheet.UsedRange.Columns[1]; 
     bool first = true; 
     foreach (var item in columnRange) 
     { 
      if (first) 
      { 
       first = false; 
      } 
      else 
      { 
       foreach (var cellValue in item.Value) 
       {  
        cellValues.Add(cellValue.ToString());  
       } 
      } 
     } 

     return cellValues; 

Skip()

+0

我更喜歡使用「for」。代碼少,可讀性強。 –

+1

@EthanF。,見編輯答案 –

+0

@羅馬的第一和第二運行良好,但沒有給我列表中的任何值。 。 – MadM

1

您可以使用LINQ的Skip函數。

var cellValues = new List<string>(); 
    //var rowsCount = worksheet.UsedRange.Rows.Count; 
    var columnRange = worksheet.UsedRange.Columns[1]; 

    foreach (var item in columnRange) 
    { 
     foreach (var cellValue in ((object[,])item.Value).Cast<object>().Skip(1)) 
     { 

      cellValues.Add(cellValue.ToString()); 

     } 
    } 

    return cellValues; 

但由於item.Value是一個動態的類型,我們需要轉換它以使用擴展方法,因爲它是一個交錯數組,我們需要使用Cast<object>()

+0

嘿所以當我嘗試這個我得到的錯誤在System.Core.dll中發生類型'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的異常,但沒有在用戶代碼中處理。 – MadM

+0

啊,這是因爲它是一種動態類型,所以需要首先進行流派。我可以更新答案。 – ramin

相關問題