2013-07-25 115 views
1

我有一個Excel電子表格來監視某些證券的市場價格。創建一個單獨的Excel進程

我從彭博市場獲得這個市場價格,只要市場開放,這些價值就會隨時變化。

我有一個簡單的VBA工具,每次發生危險時都會向我發送警報。

不幸的是我在白天運行多個Excel電子表格,有時當警報來了我其他的宏停止工作。

所以我想如果它有可能在c#中寫一些東西,我可以在後臺運行這個excel工具,作爲一個完全不同的過程,它不會干擾我的其他任何開放的excel工作簿。

+0

你是說所有ExcelSheets的這是在不同的文件中得到冷凍?或者它們都是同一個Excel文件的一部分? –

回答

0

我建議使用Microsoft.Office.Interop.Excel以實現C#你的代碼。

使用上面的NameSpace可以獲得對Excel模型的完全訪問權限,然後就可以監視不同的單元格。

代碼改爲使用C#是所有在互聯網上的Excel文件。

好消息是C#應用程序在不同的線程您的Excel文件的運行,並不會干涉他們。

,而不是試圖寫在後臺運行您的Excel工具的工具,更好的辦法是在C#寫一個工具來實現它的邏輯。

0

每個宏都應該獨立工作(除非其中的某些操作包括精確影響其他工作簿)。對於C#同樣的事情。在C#中處理Excel時,您必須依賴Excel Object/Application,並且可以根據需要創建多個Excel。每個Excel對象都與工作簿/ Excel文件關聯。您可以並行處理這些對象中的一些,而不會出現任何問題(與VBA相同 - >或許您必須查看宏中的代碼)。

Here你從MSDN展示瞭如何使用Excel的C#自動化示例代碼。

如果遇到下面這些行小代碼,你會看到,你可能會在方式影響兩個不同的Excel文件,你想:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Microsoft.Office.Interop.Excel; 

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

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string path = @"path to first Excel file"; 
      string path2 = @"path to second Excel file"; 

      Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application(); 
      Workbook oWB = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 
      Worksheet oSheet = (Worksheet)oWB.ActiveSheet; 

      Microsoft.Office.Interop.Excel.Application oXL2 = new Microsoft.Office.Interop.Excel.Application(); 
      Workbook oWB2 = oXL2.Workbooks.Open(path2, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 
      Worksheet oSheet2 = (Worksheet)oWB2.ActiveSheet; 

      oXL.Visible = true; 
      oXL2.Visible = true; 

      oXL = null; 
      oXL2 = null; 
     } 
    } 
}