2011-12-15 131 views
2

我試圖從一個工作簿中過濾數據到另一個obne,但我得到一個unpsecified異常。C#和Excel高級篩選器

我找不到許多使用c#在excel中進行過濾的例子,我不知道我的錯誤在哪裏。

這裏是我的代碼:

public void excel() 
    { 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBookImport; 
     Excel.Workbook xlWorkBookOriginal; 
     Excel.Worksheet xlWorkSheetImport; 
     Excel.Worksheet xlWorkSheetOriginal; 

     xlApp = new Excel.ApplicationClass(); 
     xlWorkBookImport = xlApp.Workbooks.Open("c:/open.xls"); 
     xlWorkBookOriginal = xlApp.Workbooks.Open("c:/open1.xls"); 
     xlWorkBookOriginal.Activate(); 
     xlWorkSheetOriginal = (Excel.Worksheet)xlWorkBookOriginal.Worksheets.get_Item(1); 
     xlWorkSheetOriginal.get_Range("1:7").Delete(); 
     xlWorkBookImport.Activate(); 
     xlWorkSheetImport = (Excel.Worksheet)xlWorkBookImport.Worksheets.get_Item(1); 
     xlWorkSheetOriginal.Cells.AdvancedFilter(Excel.XlFilterAction.xlFilterCopy, Type.Missing, CopyToRange: "a1:a6", Unique: true); 

     xlApp.Visible = true; 
    } 

任何人都可以幫我解決?

+0

的就是你得到的異常?我不太明白你的意思是什麼「過濾器」。但我認爲至少你可以讀取一個工作簿中的所有數據,並用LINQ在C#中過濾它們,並將它們填充到第二個工作簿中 – Wint 2011-12-15 13:34:25

回答

1

我明白了到底想通了myeslf:

public void excel() 
{   
Excel.Application xlApp;   
Excel.Workbook xlWorkBookImport;   
Excel.Workbook xlWorkBookOriginal;   
Excel.Worksheet xlWorkSheetImport;   
Excel.Worksheet xlWorkSheetOriginal;   
xlApp = new Excel.ApplicationClass();   
xlWorkBookImport = xlApp.Workbooks.Open("c:/open.xls");   
xlWorkBookOriginal = xlApp.Workbooks.Open("c:/open1.xls");    
xlWorkBookOriginal.Activate();   
xlWorkSheetOriginal = (Excel.Worksheet)xlWorkBookOriginal.Worksheets.get_Item(1);   
xlWorkSheetOriginal.get_Range("1:7").Delete(); 
// added code 
Excel.Range range = xlWorkSheetOriginal.get_Range("a1:v53"); 
// 
xlWorkBookImport.Activate(); 
xlWorkSheetImport = (Excel.Worksheet)xlWorkBookImport.Worksheets.get_Item(1); 
// added code 
xlWorkSheetImport.Activate(); 
Excel.Range target = xlWorkSheetImport.get_Range("a1:f1"); 
// 
// modified code    
xlWorkSheetOriginal.Cells.AdvancedFilter(Action : Excel.XlFilterAction.xlFilterCopy, 
CriteriaRange: Type.Missing, CopyToRange: target, Unique: false); 
//   
xlApp.Visible = true;  
}