.Net C#Microsoft.Office.Interop.Excel ListObject异步刷新数据源

.Net C#Microsoft.Office.Interop.Excel ListObject异步刷新数据源,c#,excel,timer,listobject,C#,Excel,Timer,Listobject,我在C#中设置了一个消息传递应用程序,并将异步接收的消息添加到列表中。我只使用Microsoft.Office.Interop.Excel命名空间,而不使用VSTO扩展,因此listobject存在问题 我想做的是使用下面的方法创建一个listobject,并使用一个timer对象写入excel电子表格 public static ListObject AddListObject() { oXL = (Excel.Application)System.Runtime.In

我在C#中设置了一个消息传递应用程序,并将异步接收的消息添加到列表中。我只使用Microsoft.Office.Interop.Excel命名空间,而不使用VSTO扩展,因此listobject存在问题

我想做的是使用下面的方法创建一个listobject,并使用一个timer对象写入excel电子表格

public static ListObject AddListObject()
    {
        oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

        oWB = oXL.Workbooks.get_Item(1);
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;

        activeRow = oXL.ActiveCell.Row;

        //content
        oSheet.Cells[activeRow , 1] = Store[0].name;
        oSheet.Cells[activeRow , 2] = Store[0].address;
        oSheet.Cells[activeRow , 3] = Store[0].number;
        oSheet.Cells[activeRow , 4] = Store[0].dob;

        Excel.ListObject listObject1 = oSheet.ListObjects.Add(
            Excel.XlListObjectSourceType.xlSrcRange, oXL.ActiveCell.CurrentRegion, false,
            Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, Type.Missing);
        listObject1.TableStyle = "TableStyleLight9";



        oXL.Visible = true;
        oXL.UserControl = false;

        return listObject1;


    }
listobject1 = AddListObject();
timer = new Timer(DoSomething, listobject1, 0, 1000);
在主程序中,启动消息传递部分后,我将获取listobject并将其传递给计时器以更新电子表格

public static ListObject AddListObject()
    {
        oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

        oWB = oXL.Workbooks.get_Item(1);
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;

        activeRow = oXL.ActiveCell.Row;

        //content
        oSheet.Cells[activeRow , 1] = Store[0].name;
        oSheet.Cells[activeRow , 2] = Store[0].address;
        oSheet.Cells[activeRow , 3] = Store[0].number;
        oSheet.Cells[activeRow , 4] = Store[0].dob;

        Excel.ListObject listObject1 = oSheet.ListObjects.Add(
            Excel.XlListObjectSourceType.xlSrcRange, oXL.ActiveCell.CurrentRegion, false,
            Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, Type.Missing);
        listObject1.TableStyle = "TableStyleLight9";



        oXL.Visible = true;
        oXL.UserControl = false;

        return listObject1;


    }
listobject1 = AddListObject();
timer = new Timer(DoSomething, listobject1, 0, 1000);
当timer对象每秒调用DoSomething方法时,我该怎么做

public void DoSomething(ListObject obj)
    { 
        //refresh listobject and write and update to spreadsheet every second

    }
在VSTO中,我将执行以下操作:

listobject1 = AddListObject();
listobject1.DataSource=Store;
listobject1.AutSetDataBoundColumnHeaders=true;
timer = new Timer(DoSomething, listobject1, 0, 1000);

public void DoSomething(object state)
    { 
        //refresh listobject and write and update to spreadsheet every second
        ListObject lbo = (ListObject)state;
        lbo.RefreshDataRows();

    }

在没有VSTO扩展的情况下,我如何做到以下几点?

我对它的体系结构有点困惑--您能澄清一下吗?您在DoSomething()方法中说过“刷新listobject并每秒写入和更新电子表格”——您不能在该方法中调用AddListObject()吗?另外,您正在从名为AddListObject()的方法返回一个值-也许您应该将其重命名为GetListObject()?好吧,我不能在该方法内调用AddListObject,因为这样做将导致创建一个新的listObject。请允许我澄清一点:我要做的是先添加一个listobject,然后更新listobject数据源,当发送新消息时,该数据源将每秒显示在电子表格中。您能否再显示一些代码,例如您使用的listobject1=AddListObject()?您好,ZeroVector,根据要求,我已编辑并更新了问题。请看一看并给出一些评论。谢谢对于AddListObject(),我想先将listobject添加到电子表格中,然后返回listobj,以便将其传递给计时器进行刷新。希望这次我明白了。