创建单独的Excel流程

时间:2013-07-25 17:40:00

标签: c# excel

我有一个Excel电子表格,可以监控某些证券的市场价格。

我从彭博获得这个市场价格,只要市场开放,这些价值就会一直变化。

我有一个简单的VBA工具,每次风险被破坏时都会向我发送警报。

不幸的是,我在白天运行多个Excel电子表格,有时当警报出现时我的其他宏停止工作。

所以我在考虑是否有可能在c#中编写一些内容,我可以在后台运行这个excel工具作为一个完全不同的过程,它不会干扰我打开的任何其他excel工作簿。

2 个答案:

答案 0 :(得分:0)

我建议使用Microsoft.Office.Interop.ExcelC#中实现您的代码。

使用上面的NameSpace,您可以获得对Excel对象模型的完全访问权限,然后您可以监视不同的单元格。

使用C#读取Excel文件的代码遍布互联网。

好消息是C#应用程序将在Excel文件的不同主题中运行,并且不会干扰它们。

更好的方法是在C#中编写一个工具来实现它的逻辑,而不是尝试编写工具来在后台运行Excel工具。

答案 1 :(得分:0)

每个宏应该独立工作(除非它所做的某些操作包括精确影响其他工作簿)。 C#也是一样的。在C#中处理Excel时,你必须依赖Excel Object/Application,你可以创建任意多个;每个Excel对象都与一个工作簿/ Excel文件相关联。您可以并行处理其中一些对象而没有任何问题(等效于VBA的情况 - >也许您必须查看宏中的代码)。

Here您有一个MSDN示例代码,展示了如何使用C#自动化Excel。

如果你在这些行下面运行小代码,你会看到两个不同的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;
        }
    }
}
相关问题