C#でメッセージングアプリケーションをセットアップしていて、非同期で受信したメッセージをリストに追加します。私はMicrosoft.Office.Interop.Excel名前空間のみを使用しており、VSTO拡張機能は使用していないため、listobjectで問題が発生します。
私がやりたいのは、以下のメソッドを使用してリストオブジェクトを作成し、タイマーオブジェクトを使用して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;
}
メインプログラムでは、メッセージング部分を開始した後、listobjectを取得し、それをタイマーに渡してスプレッドシートを更新します。
listobject1 = AddListObject();
timer = new Timer(DoSomething, listobject1, 0, 1000);
タイマーオブジェクトが毎秒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拡張機能なしで次のことを行うにはどうすればよいですか?