2016-10-04 62 views
1

假定打開一個新的Excel文件並輸入數據。外部C#應用程序能否掛鉤到Excel進程並從中獲取數據?另外,Excel文件從不保存到文件中。是否可以通過內存從Excel中導入數據?

難道這樣做很難嗎?你也可以指出我如何實現這一目標的正確方向。

+0

你想要一個C#應用程序讀取Excel存儲在內存中的特定文件的內容嗎?聽起來像是一種痛苦,如果甚至可以做到的。 –

+0

不,大多數操作系統的應用程序安全模型都不允許這樣做! – Illuminati

+0

http://stackoverflow.com/questions/3746409/how-to-read-some-data-from-a-windows-application-memory也許有幫助 – 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

相關問題