Click here to Skip to main content
15,896,606 members
Home / Discussions / C#
   

C#

 
QuestionProblem with Excel WorksheetFunction.Growth in c# Pin
Ross R4-Nov-12 23:17
Ross R4-Nov-12 23:17 
I have a document level application for Excel 2010 using VSTO and c#. The following code is used to call the Excel Growth function.

C#
double[] known_Ys, new_Ys, known_Xs, new_Xs;
   // Both of the known arrays have a length of 7
   // The new arrays have a length of 5
   // All arrays were loaded with valid double values
   // except new_Ys which will contain the result
Excel.WorksheetFunction wsf = Application.WorksheetFunction;
object results = wsf.Growth(known_Ys, known_Xs, new_Xs, System.Type.Missing);


While debugging, "results" show a type of 'System.Object[*]' which is a System.Object[] with an undefined lower boundary.

Looking at the variable, there is an array of double values that appear to be correct. The lower boundary is 1, and the upper boundary is 5.

When attempting to cast the results to either object[] or double[], I get an exception, "Unable to cast object of type 'System.Object[*]' to type 'System.Object[]' or 'double[]'.

I've also unsuccessfully tried to use the static methods of the Array class to copy the contents out.

Any thoughts on a resolution would be appreciated.

I don't want to use VBA code to resolve the problem if it can be avoided.

I've also considered a work-around, using a hidden worksheet to perform the calculations and copying the results into the c# application, but feel I should be able to handle it in the c# code.


I found the following work-around, unless someone has a better solution.


"results" inherits from System.Array.

C#
System.Array resultsArray = results as System.Array;
if (resultsArray != null)
{
   int idx = resultsArray.GetLowerBound(0);
   for (int i = 0; i < new_Ys.Length; i++)
   {
      new_Ys[i] = (double)resultsArray.GetValue(idx);
      idx++;
   }
   return new_Ys;
}
else
{
   // Handle exception.
   return null;
}


The conflict is that c# vectors (one dimensional arrays) are always zero based, so explicit casts won't work.

modified 5-Nov-12 6:46am.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.