2012-03-10 61 views
0

下面是一個工作代碼。我發現在查找標準中,通過將搜索標準的起點更改爲:wsSheet.Cells [65000,columnNumber]它將解決問題。但這不是一個真正的解決方案。的Excel在C#中查找操作將跳過第一行

是否有另一種方法強制查找操作在Excel表的第一行開始?

public static string FindFirstStringInColumn(Excel.Workbook wbBook, string strSheet, string strSearchMe, string strColumnLetter) 

    { 
     Excel.Worksheet wsSheet = null; 
     wsSheet = (Excel.Worksheet)wbBook.Worksheets[strSheet]; 
     Excel.Range currentFind = null; 


     Excel.Range range = (Excel.Range)wsSheet.Columns[strColumnLetter, Type.Missing]; 
     int columnNumber = ExcelCOM.GetColumnNumber(strColumnLetter); 
     //~~> Search for strSearchMe 
     currentFind = range.Find(strSearchMe, 
         wsSheet.Cells[65000, columnNumber], 
         Excel.XlFindLookIn.xlValues, 
         Excel.XlLookAt.xlPart, 
         Excel.XlSearchOrder.xlByRows, 
         Excel.XlSearchDirection.xlNext, 
         false, 
         false, 
         false); 

     if (currentFind != null) 
     { 
      string sAddress = currentFind.get_Address(false, false, Excel.XlReferenceStyle.xlA1, false, false); 
      //~~> Display the found Address 
      return (sAddress).ToString(); 
     } 
     else 
     { 
      return ("Nothing found"); 
     } 

    } 
+0

我在考慮Excel函數指定要排序的範圍,並提示您列名是否在第一行... – DOK 2012-03-10 15:59:51

回答

0

這個參數是可選的,使用命名參數,不指定它,這應該與該範圍內的「最頂端的」細胞開始。

+0

確定嗎? [MSDN](http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.find(V = office.11​​)的.aspx)指出:「如果不指定此參數,搜索開始**在**範圍左上角的單元格之後。「 – 2012-03-10 16:08:49

+0

但它會包裹 - 如果你想讓左上角成爲第一個結果而不是最後一個,你的回答會更好。 – Hogan 2012-03-10 16:35:27

0

從我已經能夠收集信息,試着

range.Cells[range.Count]

爲你的「後」參數值,其中至少擺脫了硬編碼65000的,並應能正常工作的其他範圍比整列。