2012-03-10 101 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的,并应能正常工作的其他范围比整列。