2011-12-15 89 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;  
}