Ejemplo n.º 1
0
        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);

            });
        }
Ejemplo n.º 2
0
        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);
        }