2012-10-03 81 views
0

我使用UsedRange通過C#中的interop excel對象來獲取工作表的最後一行。該工作表是新創建的,僅編輯了名稱屬性。然而,當我得到ws.UsedRange.Rows.Count時,我得到了10k以上。爲什麼這不給我0或1?我怎樣才能得到真正的最後一排?Interop Excel UsedRange

Application xlApp = null; 
      Worksheet temp; 
      Range cell; 
      int row; 
      int col; 
      int i; 
       xlApp = new Application(); 
       xlApp.Visible = true; 
       Workbook wbDetail = xlApp.Workbooks.Add(); 
       wbDetail.Worksheets.Add(Type.Missing, Type.Missing, 26, XlWBATemplate.xlWBATWorksheet); 
       i = 0; 
       while(i < 29) 
       { 
        temp = (Worksheet)wbDetail.Worksheets[i+1]; 
        temp.Name = "TITLE_"+i 
        i++; 
       } 

     DateTime reqdate; 
     i=0; 
     while(i<29) 
       { 
         temp = (Worksheet)wbDetail.Worksheets["TITLE_"+i]; 
         int j = 0; 
         temp.get_Range("A1", Type.Missing).Value = "TITLE STUFF"; 
         row = temp.UsedRange.Rows.Count; 
         while(j < 50) 
         { 
          cell = (Range)temp.Cells[row+1, j+1]; 
          cell.Value = j; 
          j++; 
         } 
        } 
        i++ 
       } 
       wbDetail.Save(); 
+0

我編輯了您的標題。請參見「[應的問題包括‘標籤’,在他們的頭銜?(http://meta.stackexchange.com/questions/19190/)」,這裏的共識是「不,他們不應該」。 –

+0

也許你應該分享你用來生成工作簿和更新名稱的代碼,以便我們可以實際調查而不是推測。 –

+0

@DanielCook張貼於上面。這是簡單的代碼。 – steventnorris

回答

1

在某些條件下(不知道它們是什麼),Excel將具有沒有任何實際值(非空白,空值等)的「used」行。

我過去的做法是將表單的值加載到數組*中,然後在數組的行中向後循環,直到其中一列具有非空值。

* - 我會強烈建議不要在循環內調用Cells[i,j]。加載數組中的值,然後遍歷數組:

var tempValues = temp.Value; 
... 
while(j < 50) 
{ 
    tempValues[row+1, j+1] = j 
    j++; 
} 
temp.Value = tempValues