2014-02-11 62 views
0

我创建了我自己的搜索并用excel替换了一个额外的功能区。我想在excel文档中找到某个字符串(不是现有的文档,当我运行应用程序时,visual studio会自动打开excel)。问题在于他无法在电子表格中找到我们在编辑框(txtFind)中给出的值。当我创建一个单元对象时,该应用程序在我的循环中给出了一个错误。Excel加载项c#找到

这是代码:

Excel.Application exc = new Excel.Application(); 
    if (exc == null) 
    { 
     Console.WriteLine("ERROR: EXCEL couldn't be started!"); 
    } 

    Workbooks workbooks = exc.Workbooks; 
    Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
    Sheets sheets = workbook.Worksheets; 
    Worksheet worksheet = (Worksheet)sheets.get_Item(1); 
    if (worksheet == null) 
    { 
     Console.WriteLine("ERROR: worksheet == null"); 
    } 
    for (int i = 1; i < 150; i++) 
    { 
     for (int j = 1; j < 150; j++) 
     { 
      var cell = (worksheet.Cells[i, j] as Excel.Range).Value; 
      if (cell == txtFind.Text.ToString()) 
      { 
       MessageBox.Show("FOUND"); 
      } 
      else 
      { 
       cell.FindNext(); 
      } 
     } 
    }  
+0

你的应用程序给出了什么错误? – ElectricRouge

+0

var cell =(worksheet.Cells [i,j] as Excel.Range).Value;在这一行上,他给出了一个错误,System.NullReferenceException – Jesper

+0

可能是你的转换'因为Excel.Range'失败或在'i,j'范围内没有值。通过保持中断点来检查你得到这个错误的范围。 – ElectricRouge

回答

1
Excel.Application exc = new Excel.Application(); 
    if (exc == null) 
    { 
     Console.WriteLine("ERROR: EXCEL couldn't be started!"); 
    } 

    Workbooks workbooks = exc.Workbooks; 
    Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
    Sheets sheets = workbook.Worksheets; 
    Worksheet worksheet = (Worksheet)sheets.get_Item(1); 

    if (worksheet == null) 
    { 
     Console.WriteLine("ERROR: worksheet == null"); 
    }  
    Excel.Range range = worksheet.UsedRange; 
    Excel.Range currentFind; 

    currentFind = range.Cells.Find(txtFind.Text.ToString(), Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, false, false); 
    if (currentFind != null) 
    { 
     MessageBox.Show("found"); 
    } 
    else 
    { 
     MessageBox.Show("not found"); 
    } 

这是我的新的代码块......仍然是currentFind有一个空值。当我通过Visual Studio运行应用程序时,我用一些我想查找的值填充一些单元格,所以我没有检查现有的文件。

0
  1. 您只搜索第150行和150列。如果第151行有数据呢?

  2. 你为什么要做.FindNext?只有在您执行Find()操作时才会调用此功能。对于您手动搜索所有行和列,Find()操作是更好的选择。

  3. 您的nullrefexception最可能的原因是该范围不存在。如果你坚持对范围进行硬编码(150x150),那么检查IF语句的值是否为空。你最好使用sheet.UsedRange范围,它会告诉你需要搜索多少纸张。

  4. 上面的代码将永远不会找到该行,因为您正在添加一个新的空白工作表,然后搜索它。一张新的空白纸将永远不会包含您的价值。