2016-10-04 5 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

関連する問題