2016-03-30 38 views
0

"Ad", "Cinsiyet", "Bölüm" sütunlarına sahip "mySheet" adlı bir Excel sayfam var.Office.Interop.Excel içinde C# kullanarak belirli bir sütunun filtrelenmiş değerlerini alın. #

Bir dizi öğrenciye, Bölümü "D" olan bir isim almak istiyorum.

Excel.Sheets ExcelSheets = excelWorkBook.Sheets; 
Excel.Worksheet excelWorkSheet = ExcelSheets.get_Item(1); 
Excel.Range excelRange = excelWorkSheet.UsedRange; 
excelRange.AutoFilter(3, "D", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, Type.Missing); 
Excel.Range firstColumn = excelRange.Columns[1]; 
System.Array myvalues = (System.Array)firstColumn.Cells.Value; 
strarrCreateExcel = myvalues.OfType<object>().Select(o => o.ToString()).ToArray(); 
strarrCreateDB = strarrCreateExcel; 
+0

Yani bir şey denediniz, yaklaşımınızın nesi yanlış? – mason

cevap

0

aşağıdaki kodu deneyin: Aşağıdaki

benim kodudur

 private void AutoFilterNames() 
    { 
     xl.Application xlApp = new xl.Application(); 
     xl.Workbooks xlWbks = xlApp.Workbooks; 
     xl.Workbook xlWbk = xlWbks.Open(@"C:\Temp\Book1.xlsx"); 

     xl.Sheets xlSheets = xlWbk.Sheets; 
     xl.Worksheet xlWorkSheet = xlSheets.get_Item(1); 
     xl.Range xlUsedRange = xlWorkSheet.UsedRange; 
     xlUsedRange.AutoFilter(3, "D", xl.XlAutoFilterOperator.xlAnd, Type.Missing, Type.Missing); 

     xl.Range filteredRange = xlUsedRange.SpecialCells(xl.XlCellType.xlCellTypeVisible); 
     var names = new List<string>(); 

     for (int areaId = 2; areaId <= filteredRange.Areas.Count; areaId++) 
     { 
      xl.Range areaRange = filteredRange.Areas[areaId]; 
      object[,] areaValues = areaRange.Value; 
      names.Add(areaValues[1, 1].ToString()); 
     } 

     var namesToArray = names.ToArray(); 
    } 

Not: excel nesneleri serbest bırakmak için unutmayın. Sen benim sorunu çözmek kodunun üzerinde kullanma here

+0

Ben filtreleniyorumRange.Areas.Count = 2 .. neden? Filtreden sonra tam listeyi istiyorum :( – Bh00shan

+0

Eğer count = 2 alırsanız, filtreden sonra sadece iki satır görülebilir, değil mi? – ehh

0
xl.Application xlApp = new xl.Application(); 
    xl.Workbooks xlWbks = xlApp.Workbooks; 
    xl.Workbook xlWbk = xlWbks.Open(@"C:\Temp\Book1.xlsx"); 

    xl.Sheets xlSheets = xlWbk.Sheets; 
    xl.Worksheet xlWorkSheet = xlSheets.get_Item(1); 
    xl.Range xlUsedRange = xlWorkSheet.UsedRange; 
    xlUsedRange.AutoFilter(3, "D", xl.XlAutoFilterOperator.xlAnd, Type.Missing, Type.Missing); 

    xl.Range filteredRange = xlUsedRange.SpecialCells(xl.XlCellType.xlCellTypeVisible); 
    var strarrCreateExcel = new List<string>(); 
    foreach (Excel.Range area in filteredRange.Areas) 
     { 
      foreach (Excel.Range row in area.Rows) 
      { 
       if (!strarrCreateExcel.Contains(((Excel.Range)row.Cells[1, 1]).Text)) 
        strarrCreateExcel.Add(((Excel.Range)row.Cells[1, 1]).Text); 
      } 
     } 

yardım alabilirsiniz.

İlgili konular