|I have a document level application for Excel 2010 using VSTO and c#. The following code is used to call the Excel Growth function.
double known_Ys, new_Ys, known_Xs, new_Xs;
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.
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);
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.