2016-10-04 4 views
1

새 Excel 파일이 열리고 데이터가 입력됩니다. 외부 C# 응용 프로그램이 Excel 프로세스에 연결되어 데이터를 가져올 수 있습니까? 또한 Excel 파일은 절대로 파일에 저장되지 않습니다.Excel에서 메모리를 통해 데이터를 가져올 수 있습니까?

이 작업을 수행하기 어려울뿐만 아니라이를 달성하는 방법에 대한 올바른 방향을 제시해 줄 수 있습니까?

+0

Excel에서 특정 파일의 메모리에 저장 한 내용을 읽는 C# 응용 프로그램이 필요하십니까? 그것이 가능하다면 통증과 같게 들립니다. –

+0

아니요, 대부분의 OS의 응용 프로그램 보안 모델은이를 허용하지 않습니다! – Illuminati

+0

http://stackoverflow.com/questions/3746409/how-to-read-some-data-from-a-windows-application-memory maybe helpful – Hozikimaru

답변

0

"button1"이라는 단추가 추가 된 Windows 양식 응용 프로그램의 코드 뒤에이 코드를 추가하기 만하면됩니다. 이 샘플 코드는 Excel 파일의 셀을 반복하고 각 셀의 내용을 메시지 상자에 표시합니다. 물론 "Microsoft.Office.Interop.Excel"에 대한 프로젝트 참조가 필요합니다.

실제로 Excel 파일을 만드는 것을 잊지 마십시오.이 예제에서는이 경로 "C : \ ExcelData \ DataToImp.xlsx"를 사용했습니다.

using Excel = Microsoft.Office.Interop.Excel; 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     Excel.Range range; 

     string str; 
     int rCnt = 0; 
     int cCnt = 0; 

     xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Open("C:\\ExcelData\\DataToImp.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     range = xlWorkSheet.UsedRange; 

     for (int rowIndex = 1; rowIndex <= range.Rows.Count; rowIndex++) 
     { 
      for (int columnIndex = 1; columnIndex <= range.Columns.Count; columnIndex++) 
      { 
       Excel.Range rangeTest = range.Cells[rowIndex, columnIndex] as Excel.Range; 

       if (rangeTest.MergeCells)// && rangeTest.Value2 == null) 
       { 
        //continue; 

        int columns = rangeTest.Columns.Count; 
        columnIndex += columns; 
       } 

       MessageBox.Show("m " + (string)rangeTest.Value2); 

      } 
     } 

     xlWorkBook.Close(true, null, null); 
     xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 
    } 

    private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception ex) 
     { 
      obj = null; 
      MessageBox.Show("Unable to release the Object " + ex.ToString()); 
     } 
     finally 
     { 
      GC.Collect(); 
     } 
    } 
+1

이것은 나의 처음이었다. OP에 대한주의 사항은 아닙니다. 이미 열려있는 Excel을 가져 와서 이런 방식으로 "후크 인"할 수는 없으므로 프로그램을 먼저 실행해야합니다.이 프로그램은 Excel을 열고 그곳에서 모든 사람 유형을 읽을 수 있습니다 그걸로. – Quantic

+1

그래, 그렇게하는 방법입니다. 또한 Excel에서 데이터를 수정 한 후 파일을 디스크에 "저장"해야합니다. – Clock

+1

또한 Excel에서 응용 프로그램을 열 필요가 없습니다. 단지 파일을 읽습니다. 이 기능을 사용하려면 Excel을 열 필요가 없습니다. – Clock

관련 문제