2013-07-25 66 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; 
     } 
    } 
}