2016-07-29 4 views
-3

코드에 오류가 없지만 Excel 파일이 붙어 있습니다. 나는 2 엑셀 파일을 사용했습니다, 하나는 abc30이고 다른 하나는 abc31입니다. abc30이 필터링되어 abc31으로 저장되었으므로 이제 abc31에 액세스하고 싶지만 다시 abc30 데이터가 여기에옵니다. 코드를 확인하고 문제를 알려주십시오.Excel 파일이 백그라운드에서 실행 중이고 다른 Excel 파일에 액세스하는 동안 주 Excel 파일 데이터가 수신됩니다.

using System; 
using System.Reflection; 
using System.IO; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Microsoft.Office.Interop.Excel; 
using Excel = Microsoft.Office.Interop.Excel; 

namespace ExcelCalculation 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     // button click 
     private void bindingbtn_Click(object sender, EventArgs e) 
     {     
      Excel.Application excelApp = new Excel.Application(); 
      //ApplicationClass excelApplication = null; 
      Workbook excelWorkBook = null; 
      Worksheet targetSheet = null; 
      // Excel.Range salesTable=null ; 

      // Declare helper variables. 
      string workBookName = @"E:\Sample\abc30.xlsx"; 
      string worksheetName = "DATA"; 

      object useDefault = Type.Missing; 

      // Open the source workbook. 
      excelWorkBook = 
       excelApp.Workbooks.Open(workBookName, 
        useDefault, useDefault, useDefault, useDefault, 
        useDefault, useDefault, useDefault, useDefault, 
        useDefault, useDefault, useDefault, useDefault, 
        useDefault, useDefault); 


      string[] listFilter = new string[] { "abc, def (11)", "df, df (1111)", "Md, At (1388)", "Gho, Sram (183)" }; 

      // Get the worksheet that contains the data to filter. 
      targetSheet = 
       (Worksheet)(excelWorkBook.Worksheets[worksheetName]); 


      Excel.Range range = targetSheet.UsedRange; 
      range.AutoFilter(18, "open", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); 
      range.AutoFilter(26, "saS", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); 
      range.AutoFilter(23, "abcd", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); 

      foreach (string abc in listFilter) 
      { 
       range.AutoFilter(27, listFilter, Excel.XlAutoFilterOperator.xlFilterValues, Type.Missing, true); 
      } 
      Excel.Range filteredRange = range.SpecialCells(Excel.XlCellType.xlCellTypeVisible); 
      excelApp.ActiveWorkbook.SaveAs(@"E:\Sample\abc31.xlsx"); 

      excelWorkBook.Close(true, null, null); 
      excelApp.Quit(); 
      Marshal.ReleaseComObject(targetSheet); 
      Marshal.ReleaseComObject(excelWorkBook); 
      Marshal.ReleaseComObject(excelApp); 

      FirstColumn(@"E:\Sample\abc31.xlsx"); 
     } 

     // Firstcolumn (filename) method ,here i'm getting error 
     public static string[] FirstColumn(string filename) 
     { 
//Here in this method , I'm not getting the data what i need , 
//i'm getting from main excel file data .please let me know where i'm wrong. 

      Excel.Application excelApp1 = new Excel.Application(); 
      FileInfo fileInfo = new FileInfo(filename); 
      fileInfo.IsReadOnly = false; 

      if (excelApp1 == null) 
      { 
       Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct."); 
       return null; 
      } 
      Workbook wb = excelApp1.Workbooks.Open(filename, 
       0, false, 5, "", "", false, XlPlatform.xlWindows, "\t", false, false, 0, true); 
      //wb.Path = filename; 
      Sheets sheets = wb.Worksheets; 
      Worksheet ws = (Worksheet)sheets.get_Item("DATA"); 
// getting 19th column 
      Range firstColumn = ws.UsedRange.Columns[19]; 
      System.Array myvalues = (System.Array)firstColumn.Cells.Value; 
      string[] strArray = myvalues.OfType<object>().Select(o => o.ToString()).ToArray(); 
      return strArray; 
//return array will be having data from main excel i.e abc30, but (string filename - abc31)has only filtered data , i need that data , please help me out . 
     } 
    } 
} 
+0

을 참조하십시오. 필터의 모든 데이터는 필터가 있기 때문에 여전히 존재합니다. 데이터를 제거하려는 경우 새 데이터에 필요한 데이터를 복사하는 것이 가장 좋습니다. – BugFinder

+0

안녕하세요, 데이터를 필터링하고 저장하면 1000 개 중 10 개의 데이터 만 표시됩니다. 그래서 나는 abc31 파일에 10 개의 데이터를 저장했다. 그리고 나는 그것을 액세스하려고 노력하고있다. – CharanS

+0

아니, 당신은 1000 라인의 데이터를 저장했다. 왜냐하면 필터는 단지 그 것이다. 단지 다른 990이 여전히 거기에 있다는 것을 보았을 뿐이다. 당신이 얻고있는 결과에 의해 입증 된대로 – BugFinder

답변

0

그냥 숨겨지지 않은 세포를 확인 (또는 Range.SpecialCells (xlCellTypeVisible) 방법을 사용)해야한다. Easiest way to loop through a filtered list with VBA?

+0

안녕하세요, 밀라노, 귀하의 회신에 감사드립니다. – CharanS

+0

응용 프로그램을 실행할 때 abc30의 첫 번째 파일에서 데이터를 가져 오는 파일을 Excel에서 처리하고 abc31의 데이터를 원한다면 어떻게해야합니까? C에서 다른 방법을 시도했지만 여전히 데이터를 가져 오지 못했습니다. 그것을 확인하고 저에게 해결책을 주려고 시도하십시오 – CharanS

+0

엑셀이 abc30.xlsx 파일에서 데이터를 반환하고 있음을 어떻게 알 수 있습니까? 'FirstColumn' 메쏘드 안에서'wb.FullName' 속성을 읽으면 어떻게됩니까? –

관련 문제