public void OnButtonPressed(IRibbonControl control) { //MessageBox.Show("Hello from control " + control.Id); string str=FirstAddIn.MyGetHostname(); var UIHandler = new Action<object>((o) => { ctrl.ShowDialog(); }); ExcelAsyncUtil.QueueAsMacro(() => { refCell = (ExcelReference)XlCall.Excel(XlCall.xlfActiveCell); }); if (waitSet) //avoid double submission { ThreadPool.QueueUserWorkItem(new WaitCallback(UIHandler)); return; } else { waitSet = true; } var wait = new ManualResetEvent(false); var handler = new EventHandler((o, e) => { cr = (TestWinForm.UserControl1.CtrlmRequest)o; result = MakeArrayetest(cr.row, cr.col); waitSet = false; wait.Set(); }); ctrl.registerCallback(handler); ThreadPool.QueueUserWorkItem(new WaitCallback(UIHandler)); //For simplicity, we implement the wait here wait.WaitOne(); //ExcelReference cell = ExcelAsyncUtil.QueueAsMacro(() =>XlCall.Excel(XlCall.xlfActiveCell); //ExcelReference caller = XlCall.Excel(XlCall.xlfCaller) as ExcelReference; //MessageBox.Show("Active cell:" + cell.RowFirst+","+cell.ColumnFirst); //var activeCell = new ExcelReference(1, 1); ExcelAsyncUtil.QueueAsMacro(() => { //ExcelReference cell = (ExcelReference)XlCall.Excel(XlCall.xlfActiveCell); ExcelReference cell = refCell; int testRowSize = cr.row; int testColSize = cr.col; var activeCell = new ExcelReference(cell.RowFirst,testRowSize+cell.RowFirst-1, cell.ColumnLast ,cell.ColumnLast + testColSize-1); //object[,] o = new object[testRowSize, testColSize]; //for (int i = 0; i < testRowSize; i++) //{ // o[i, 0] = i; // o[i, 1] = "test" + i; // o[i, 2] = DateTime.Now; // o[i, 3] = "" + i + ",3"; // o[i, 4] = "" + i + ",4"; //} activeCell.SetValue(result); XlCall.Excel(XlCall.xlcSelect, activeCell); }); }
public static object mySampleTbl() { if (RunOnce) { RunOnce = !RunOnce; return XlCall.Excel(XlCall.xlUDF, "Resize", lastRun); ; } else { lastRun = null; RunOnce = !RunOnce; } TestWinForm.UserControl1.CtrlmRequest cr = new TestWinForm.UserControl1.CtrlmRequest(); object result = null; bool waitSet = false; //object result = MakeArrayet(5, 5); TestWinForm.UserControl1 ctrl = new TestWinForm.UserControl1(); var wait = new ManualResetEvent(false); var handler = new EventHandler((o, e) => { cr = (TestWinForm.UserControl1.CtrlmRequest)o; result = MakeArrayet(cr.row, cr.col); waitSet = true; wait.Set(); }); ctrl.registerCallback(handler); var tHandler = new Action<object> ( (o) => { ctrl.ShowDialog(); }); ThreadPool.QueueUserWorkItem(new WaitCallback(tHandler)); //MyAsyncMethod(data, handler); // so it started and will fire handler soon if (!waitSet) { wait.WaitOne(); } lastRun = result; // Call Resize via Excel - so if the Resize add-in is not part of this code, it should still work. return XlCall.Excel(XlCall.xlUDF, "Resize", lastRun); }