public dynamic evaluate(string formula)
        {
            dynamic result;

            try
            {
                result = evaluator.Evaluate(formula);
            }
            catch (IOException)
            {
                result = -2146826273; // #Value!
            }
            return(result);
        }
예제 #2
0
        public static void ExportXmlMappedListToHDF5()
        {
            String         sFileName = "test.h5";
            ExcelReference selection = null;

            MOIE.Application ma           = null;
            MOIE.Range       mr           = null;
            MOIE.XmlMap      aXmlMap      = null;
            MOIE.ListObject  aListObject  = null;
            RecordSetMD      aRecordSetMD = null;

            //using isContinuing instead of throwing on last steps
            Boolean isContinuing = true;

            try {
                selection = (ExcelReference)XlCall.Excel(XlCall.xlfSelection);
                ma        = (ExcelDnaUtil.Application as MOIE.Application);
                mr        = ma.Evaluate(XlCall.Excel(XlCall.xlfReftext, selection, true)) as MOIE.Range;

                try {
                    aListObject = mr.ListObject;
                    aXmlMap     = aListObject.XmlMap;
                }
                catch (Exception) {
                    throw new com.WDataSci.WDS.WDSException("Error: could not pull XmlMap from selection");
                }

                aRecordSetMD = new RecordSetMD(RecordSetMDEnums.eMode.Internal)
                               .cAs(RecordSetMDEnums.eType.HDF5, RecordSetMDEnums.eSchemaType.XSD)
                ;

                aRecordSetMD.SchemaMatter.InputSchema = new XmlDocument();
                aRecordSetMD.SchemaMatter.InputSchema.LoadXml(aXmlMap.Schemas.Item[1].XML);

                MessageBoxButtons msgboxbuttons  = MessageBoxButtons.YesNoCancel;
                DialogResult      msgboxresponse = MessageBox.Show("Write HDF5 file from XmlMap'd ListObject of selection?", "Confirm", msgboxbuttons);

                isContinuing = (isContinuing && msgboxresponse == System.Windows.Forms.DialogResult.Yes);

                if (isContinuing)
                {
                    using (SaveFileDialog aSaveFileDialog = new SaveFileDialog()) {
                        aSaveFileDialog.InitialDirectory = ma.ActiveWorkbook.Path;
                        aSaveFileDialog.Filter           = "HDF5 Files (*.h5)|*.h5|All Files (*.*)|*.*";
                        aSaveFileDialog.FilterIndex      = 1;
                        aSaveFileDialog.RestoreDirectory = true;
                        aSaveFileDialog.FileName         = sFileName;
                        aSaveFileDialog.AddExtension     = true;
                        //aSaveFileDialog.CheckFileExists = true;
                        aSaveFileDialog.CheckPathExists = true;
                        aSaveFileDialog.Title           = "Export XmlMap'd ListObject to HDF5 (*.h5) File....";

                        if (aSaveFileDialog.ShowDialog() == DialogResult.OK)
                        {
                            sFileName = aSaveFileDialog.FileName;
                            if (!sFileName.ToLower().EndsWith(".h5"))
                            {
                                sFileName += ".h5";
                            }
                        }
                        else
                        {
                            isContinuing = false;
                        }
                    }
                }

                if (isContinuing)
                {
                    aRecordSetMD
                    .cToFile(sFileName)
                    .cWithDataSetName("RecordSet")
                    .mReadMapFor(null, null, true);

                    int nColumns = aRecordSetMD.nColumns();
                    if (aListObject.ListColumns.Count != nColumns)
                    {
                        throw new com.WDataSci.WDS.WDSException("ListObject Column Count Does Not Match Schema Node List Count!");
                    }

                    aRecordSetMD.HDF5Matter.mWriteRecordSet(aRecordSetMD, aListObject);
                }
            }
            catch (com.WDataSci.WDS.WDSException e) {
                MessageBox.Show(e.getMessage());
            }
            catch (Exception e) {
                com.WDataSci.WDS.WDSException we = new com.WDataSci.WDS.WDSException("Error in ExportXmlMappedListToHDF5 to " + sFileName, e);
                MessageBox.Show(we.getMessage());
            }
            finally {
                selection   = null;
                aListObject = null;
                aXmlMap     = null;
                mr          = null;
                ma          = null;
                if (aRecordSetMD != null)
                {
                    aRecordSetMD.Dispose();
                }
                aRecordSetMD = null;
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return;
        }
예제 #3
0
        public static void ImportHDF5CompoundDS()
        {
            String         sFileName = "test.h5";
            ExcelReference selection = null;

            MOIE.Application tapp      = null;
            MOIE.Workbook    twb       = null;
            MOIE.Sheets      twbSheets = null;
            MOIE.Worksheet   tws       = null;
            MOIE.Range       tblr      = null;
            MOIE.Range       trng      = null;
            MOIE.Range       trng2     = null;
            MOIE.ListObject  tbl       = null;
            tapp = (ExcelDnaUtil.Application as MOIE.Application);
            Boolean screenupdating_prior = tapp.ScreenUpdating;

            MOIE.XlCalculation calculation_prior = tapp.Calculation;
            RecordSetMD        aRecordSetMD      = null;
            RecordSet          aRecordSet        = null;

            //using isContinuing instead of throwing on last steps
            Boolean isContinuing = true;

            try {
                //tapp.ScreenUpdating = false;
                tapp.Calculation = MOIE.XlCalculation.xlCalculationManual;

                int i, iP1, ii, iiP1, j, jP1, jj, jjP1;


                using (OpenFileDialog aOpenFileDialog = new OpenFileDialog()) {
                    aOpenFileDialog.InitialDirectory = tapp.ActiveWorkbook.Path;
                    aOpenFileDialog.Filter           = "HDF5 Files (*.h5)|*.h5|All Files (*.*)|*.*";
                    aOpenFileDialog.FilterIndex      = 1;
                    aOpenFileDialog.RestoreDirectory = true;
                    aOpenFileDialog.CheckPathExists  = true;
                    aOpenFileDialog.CheckFileExists  = true;
                    aOpenFileDialog.FileName         = sFileName;
                    aOpenFileDialog.AddExtension     = true;
                    aOpenFileDialog.Title            = "Import compound data from HDF5 (*.h5) File....";

                    if (aOpenFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        sFileName = aOpenFileDialog.FileName;
                    }
                    else
                    {
                        isContinuing = false;
                    }
                }

                if (isContinuing)
                {
                    String hDSPath = tapp.InputBox("Input path (with or without initial root /), if left as \"/\" and there is only 1 data set, that is used", "HDF5 path to dataset in file", "/");

                    aRecordSetMD = new RecordSetMD(RecordSetMDEnums.eMode.Input)
                                   .cAs(RecordSetMDEnums.eType.HDF5)
                                   .cFromFile(sFileName)
                                   .cWithDataSetName(hDSPath)
                                   .mReadMapFor(null, null, true)
                    ;

                    aRecordSet = new RecordSet()
                                 .cAsInput()
                                 .mReadRecordSet(aRecordSetMD)
                    ;

                    MessageBoxButtons msgboxbuttons = MessageBoxButtons.YesNoCancel;
                    DialogResult      msgboxresponse;

                    msgboxresponse = MessageBox.Show("Write to a new sheet (Yes) or point to cell for the upper left corder (No)?", "Confirm", msgboxbuttons);
                    if (msgboxresponse == System.Windows.Forms.DialogResult.Cancel)
                    {
                        throw new com.WDataSci.WDS.WDSException("Cancel");
                    }
                    if (msgboxresponse == System.Windows.Forms.DialogResult.No)
                    {
                        try {
                            selection = (ExcelReference)XlCall.Excel(XlCall.xlfSelection);
                            trng      = tapp.Evaluate(XlCall.Excel(XlCall.xlfReftext, selection, true)) as MOIE.Range;
                            trng2     = tapp.InputBox("Enter cell address (navigable)", "Output Location", trng.Address.ToString(), 100, 100, "", 0, 8) as MOIE.Range;
                            trng      = null;
                            tws       = trng2.Parent;
                            twb       = tws.Parent;
                        }
                        catch {
                            throw new com.WDataSci.WDS.WDSException("Cancel");
                        }
                    }
                    else
                    {
                        twb       = tapp.ActiveWorkbook;
                        twbSheets = twb.Sheets;
                        tws       = twbSheets.Add();
                        twbSheets = null;
                        trng2     = tws.Cells[1, 1];
                        try {
                            tws.Name = aRecordSetMD.HDF5Matter.DSName;
                        }
                        catch (Exception e) {
                            String s = tapp.InputBox("Cannot name sheet to " + aRecordSetMD.HDF5Matter.DSName, "New Sheet Name", "Leave-As-Is", 100, 100, "");
                            if (!s.Equals("Leave-As-Is"))
                            {
                                try {
                                    tws.Name = s;
                                }
                                catch (Exception) {
                                }
                            }
                        }
                    }

                    int nRows    = aRecordSet.Records.Count;
                    int nColumns = aRecordSetMD.nColumns();

                    tapp.ScreenUpdating = false;
                    tapp.Calculation    = MOIE.XlCalculation.xlCalculationManual;
                    for (jj = 0, jjP1 = 1; jj < nColumns; jj++, jjP1++)
                    {
                        trng2.Offset[0, jj].Value2 = aRecordSetMD.Column[jj].Name;
                        for (i = 0, iP1 = 1; i < nRows; i++, iP1++)
                        {
                            trng2.Offset[iP1, jj].Value2 = aRecordSet.Records_Orig[i][jj];
                        }
                    }

                    tblr = tws.Range[trng2, trng2.Offset[nRows, nColumns - 1]];
                    tbl  = (MOIE.ListObject)tws.ListObjects.AddEx(MOIE.XlListObjectSourceType.xlSrcRange, tblr, null, MOIE.XlYesNoGuess.xlYes);
                }
            }
            catch (com.WDataSci.WDS.WDSException e) {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                MessageBox.Show(e.getMessage());
            }
            catch (Exception e) {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                MessageBox.Show(e.Message);
            }
            finally {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                if (tapp.Calculation != calculation_prior)
                {
                    tapp.Calculation = calculation_prior;
                }
                //Queuing up for GC
                selection = null;
                if (aRecordSetMD != null)
                {
                    aRecordSetMD.Dispose();
                }
                aRecordSetMD = null;
                if (aRecordSet != null)
                {
                    aRecordSet.Dispose();
                }
                aRecordSet = null;
                tapp       = null;
                twb        = null;
                twbSheets  = null;
                tws        = null;
                trng       = null;
                trng2      = null;
                tblr       = null;
                tbl        = null;
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return;
        }
예제 #4
0
        static void MainTask(string[] args)
        {
            // display usage if no arguments
            if (args.Length == 0)
            {
                Console.WriteLine(Usage());
                return;
            }

            var xlApp = new Microsoft.Office.Interop.Excel.Application();

            try
            {
                Microsoft.Office.Interop.Excel._Workbook wbk = null;
                Microsoft.Office.Interop.Excel.Range     rng = null;

                xlApp.DisplayAlerts = false;
                xlApp.Visible       = true;
                xlApp.Interactive   = true;

                // no-well established parsearg method
                for (int i = 0; i < args.Length; i++)
                {
                    var cmd = args[i];
                    while (cmd[0] == '-' || cmd[0] == '/')
                    {
                        cmd = cmd.Substring(1);
                    }

                    switch (cmd)
                    {
                    case "xlFileOpen":
                    case "xlFilePath":
                        var openPath = MakeFullPath(args[++i]);
                        Console.WriteLine($"> Open Workbook {openPath}");
                        if (wbk != null)
                        {
                            wbk.Close(SaveChanges: false);
                        }
                        wbk = xlApp.Workbooks.Open(openPath);
                        break;

                    case "xlFileNew":
                        Console.WriteLine($"> New Workbook");
                        if (wbk != null)
                        {
                            wbk.Close(SaveChanges: false);
                        }
                        wbk = xlApp.Workbooks.Add();
                        break;

                    case "xlFileSave":
                        Console.WriteLine($"> Save Workbook");
                        wbk.Save();
                        break;

                    case "xlFileSaveAs":
                        var savePath = MakeFullPath(args[++i]);
                        Console.WriteLine($"> Save Workbook as {savePath}");
                        wbk.SaveAs(savePath);
                        break;

                    case "xlEvalMacro":
                        var macro = args[++i];
                        Console.WriteLine($"> Evaluate macro {macro}");
                        xlApp.Evaluate(macro);
                        break;

                    case "xlRefreshLeftToRight":
                        Console.WriteLine($"> Refresh sheets left to right");
                        foreach (Microsoft.Office.Interop.Excel._Worksheet wsh in wbk.Worksheets)
                        {
                            if (wsh.Visible == XlSheetVisibility.xlSheetVisible)
                            {
                                wsh.Calculate();
                            }
                        }
                        break;

                    case "xlRngGet":
                        var rngGetAddr = args[++i];
                        Console.WriteLine($"> Get Range {rngGetAddr}");
                        rng = xlApp.Range[rngGetAddr];
                        Console.WriteLine(rng.Value);
                        break;

                    case "xlRngSet":
                        var rngSetAddr  = args[++i];
                        var rngSetValue = args[++i];
                        Console.WriteLine($"> Set Range {rngSetAddr} {rngSetValue}");
                        rng       = xlApp.Range[rngSetAddr];
                        rng.Value = rngSetValue;
                        break;

                    case "timeout":
                        i++;
                        break;

                    default:
                        throw new Exception($"> Unexpected command {cmd}");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Environment.Exit(1);
            }
            finally
            {
                foreach (Microsoft.Office.Interop.Excel._Workbook wbk in xlApp.Workbooks)
                {
                    wbk.Close(SaveChanges: false);
                }
                xlApp.Quit();
                Console.WriteLine("Done.");
            }
        }
예제 #5
0
        public static String XSDUserInput()
        {
            //Typing for possible GC purposes
            MOIE.Application tapp         = null;
            MOIE.Range       trng         = null;
            MOIE.Range       trng2        = null;
            MOIE.XmlMap      aXmlMap      = null;
            MOIE.ListObject  aListObject  = null;
            MOIE.Workbook    twb          = null;
            MOIE.Worksheet   tws          = null;
            JniPMMLItem      aJniPMMLItem = null;
            XmlDocument      aXmlDocument = null;
            XmlNodeList      aXmlNodeList = null;

            String rv = "";


            int     h = -1;
            Boolean bIsModelCached = true;

            tapp = (ExcelDnaUtil.Application as MOIE.Application);
            Boolean screenupdating_prior = tapp.ScreenUpdating;

            MOIE.XlCalculation calculation_prior = tapp.Calculation;

            try {
                int i, j, iP1, jP1, ii, iiP1;

                twb = tapp.ActiveWorkbook;
                tws = twb.ActiveSheet;

                String            sFile         = "?";
                MessageBoxButtons msgboxbuttons = MessageBoxButtons.YesNoCancel;
                DialogResult      msgboxresponse;
                bIsModelCached = false;
                msgboxresponse = MessageBox.Show("Would you like to point to an XSD file (Yes/no)?", "Confirm", msgboxbuttons);
                if (msgboxresponse == System.Windows.Forms.DialogResult.Cancel)
                {
                    throw new com.WDataSci.WDS.WDSException("Cancel");
                }
                if (msgboxresponse == System.Windows.Forms.DialogResult.Yes)
                {
                    using (OpenFileDialog aOpenFileDialog = new OpenFileDialog()) {
                        aOpenFileDialog.InitialDirectory = tapp.ActiveWorkbook.Path;
                        aOpenFileDialog.Filter           = "XSD File (*.xsd)|*.xsd|All Files (*.*)|*.*";
                        aOpenFileDialog.FilterIndex      = 1;
                        aOpenFileDialog.RestoreDirectory = true;
                        aOpenFileDialog.AddExtension     = true;
                        aOpenFileDialog.DefaultExt       = ".xsd";
                        aOpenFileDialog.CheckFileExists  = true;
                        aOpenFileDialog.CheckPathExists  = true;
                        aOpenFileDialog.Title            = "XML Schema (XSD) File....";
                        if (aOpenFileDialog.ShowDialog() == DialogResult.OK)
                        {
                            sFile = aOpenFileDialog.FileName;
                        }
                        else
                        {
                            throw new com.WDataSci.WDS.WDSException("Cancel");
                        }
                        rv = com.WDataSci.WDS.Util.FetchFileAsString(sFile);
                    }
                }
                else
                {
                    msgboxresponse = MessageBox.Show("Point to an XSD string in a cells (Yes) or leave unspecified (No)?", "Confirm", msgboxbuttons);
                    if (msgboxresponse == System.Windows.Forms.DialogResult.Cancel)
                    {
                        throw new com.WDataSci.WDS.WDSException("Cancel");
                    }
                    if (msgboxresponse == System.Windows.Forms.DialogResult.Yes)
                    {
                        try {
                            MOIE.Range trng3 = tapp.InputBox("Use an XSD as one string contained in a cell, enter cell address (navigable)", "XSD Input", "Entire XSD File as a String", 100, 100, "", 0, 8) as MOIE.Range;
                            sFile = trng3.Text;
                            trng3 = null;
                            if (!sFile.StartsWith("<?xml"))
                            {
                                if (sFile.IndexOf("!") < 0)
                                {
                                    sFile = "'[" + tapp.ActiveWorkbook.Name + "]" + aListObject.DataBodyRange.Worksheet.Name + "'!" + sFile;
                                }
                                ExcelReference rf = XlCall.Excel(XlCall.xlfEvaluate, sFile) as ExcelReference;
                                trng3 = tapp.Evaluate(XlCall.Excel(XlCall.xlfReftext, rf, true)) as MOIE.Range;
                                sFile = trng3.Text;
                                rf    = null;
                                trng3 = null;
                                rv    = sFile;
                            }
                            else
                            {
                                throw new com.WDataSci.WDS.WDSException("Error, value not a valid XSD string");
                            }
                        }
                        catch {
                            throw new com.WDataSci.WDS.WDSException("Cancel");
                        }
                    }
                }
            }
            catch (com.WDataSci.WDS.WDSException e) {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                if (!e.getMessage().Equals("Cancel"))
                {
                    MessageBox.Show(e.getMessage() + "\n" + e.StackTrace.ToString());
                }
            }
            catch (Exception e) {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                MessageBox.Show("Error!\n" + e.Message + "\n" + e.StackTrace.ToString());
            }
            finally {
                if (tapp.ScreenUpdating != screenupdating_prior)
                {
                    tapp.ScreenUpdating = screenupdating_prior;
                }
                if (tapp.Calculation != calculation_prior)
                {
                    tapp.Calculation = calculation_prior;
                }

                aListObject = null;
                aXmlMap     = null;
                tapp        = null;
                trng        = null;
                trng2       = null;
                twb         = null;
                tws         = null;

                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return(rv);
        }