예제 #1
0
        private static string Process(ExcelReference currentFormulaCellReference, object rawQuandlCode, object rawColumns, object argName1, object argValue1, object argName2, object argValue2, object argName3, object argValue3, object argName4, object argValue4, object argName5, object argValue5, object argName6, object argValue6)
        {
            Common.StatusBar.AddMessage(Locale.English.UdfRetrievingData);
            var queryParams = new DatatableParams();

            try
            {
                // Parse out all the parameters specified in the UDF.
                var quandlCode = Tools.GetStringValue(rawQuandlCode);
                var columns    = Tools.GetArrayOfValues(rawColumns).Select(s => ((string)s).ToLower()).ToList();

                // Add all the query parameters
                if (!string.IsNullOrEmpty(QuandlConfig.ApiKey))
                {
                    queryParams.AddInternalParam("api_key", QuandlConfig.ApiKey);
                }
                if (columns.Count > 0)
                {
                    queryParams.AddInternalParam("qopts.columns", columns);
                }

                CreateFilterValue(ref argValue1);
                CreateFilterValue(ref argValue2);
                CreateFilterValue(ref argValue3);
                CreateFilterValue(ref argValue4);
                CreateFilterValue(ref argValue5);
                CreateFilterValue(ref argValue6);

                // The user query or additional qopts params
                queryParams.AddParam(Tools.GetStringValue(argName1), Tools.GetStringValue(argValue1));
                queryParams.AddParam(Tools.GetStringValue(argName2), Tools.GetStringValue(argValue2));
                queryParams.AddParam(Tools.GetStringValue(argName3), Tools.GetStringValue(argValue3));
                queryParams.AddParam(Tools.GetStringValue(argName4), Tools.GetStringValue(argValue4));
                queryParams.AddParam(Tools.GetStringValue(argName5), Tools.GetStringValue(argValue5));
                queryParams.AddParam(Tools.GetStringValue(argName6), Tools.GetStringValue(argValue6));

                // If the user has not added in any query parameters warn them that its probably not a good idea to continue forward.
                if (!ShouldContinueWithoutParams(queryParams.UserParamsGiven))
                {
                    return(Locale.English.AdditionalQueryParamsPleaseAdd);
                }

                // Pull the metadata first to get the first column name. This is not very efficient as it makes another call just to get one field.
                Common.StatusBar.AddMessage(Locale.English.UdfRetrievingData);
                queryParams.AddInternalParam("qopts.per_page", 1);
                var task = new Web().GetDatatableData(quandlCode, queryParams.QueryParams);
                task.Wait();
                var firstCellString = task.Result.Columns[0].Name;

                // Reset to pull x rows at a time.
                queryParams.AddInternalParam("qopts.per_page", RowPullCountMax);

                // Pull the data
                var retriever = new RetrieveAndWriteData(quandlCode, queryParams, currentFormulaCellReference);
                var thready   = new Thread(retriever.fetchData);
                thready.Priority     = ThreadPriority.Normal;
                thready.IsBackground = true;
                thready.Start();

                // Begin the reaping thread. This is necessary to kill off and formula that are functioning for a long time.
                var range = Tools.ReferenceToRange(currentFormulaCellReference);
                FunctionGrimReaper.AddNewThread(thready, range.Application);

                return(Utilities.ValidateEmptyData(firstCellString));
            }
            catch (DatatableParamError e)
            {
                Logger.log(e, AdditionalInfo(queryParams));
                return(e.Message);
            }
            catch (System.Exception e)
            {
                return(Common.HandlePotentialQuandlError(e, true, AdditionalInfo(queryParams)));
            }
        }
예제 #2
0
 private void ThisAddIn_Shutdown(object sender, EventArgs e)
 {
     FunctionGrimReaper.EndReaping();
 }
예제 #3
0
 public void AutoClose()
 {
     FunctionGrimReaper.EndReaping();
     // For Intellisense 1.1.0
     // IntelliSenseServer.Uninstall();
 }
예제 #4
0
 public void AutoClose()
 {
     FunctionGrimReaper.EndReaping();
 }