2014-02-11 91 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. 上面的代碼將永遠不會找到該行,因爲您正在添加一個新的空白工作表,然後搜索它。一張新的空白紙將永遠不會包含您的價值。