我正在拼命地这样做。
我已经能够复制这篇文章中的行为。
http://damianblog.com/2009/07/05/excel-wcf/comment-page-1/#comment-64232
但是,我无法将数组传递给公开的wcf函数。
我的WCF服务就是这样(我也尝试使用int数组)
public object[] GetSomeArray()
{
return new object[] { 1, 2, 3, 4};
}
public object[] ReturnSomeArray(object someArray)
{
object[] temp = (object[]) someArray;
for (int i = 0; i < temp.Length; i++)
{
temp[i] = (int)temp[i] + 1;
}
return temp;
}
我的VBA代码看起来像这样。
Dim addr As String
...
Dim service1 As Object
Set service1 = GetObject(addr)
Dim columnsVar
columnsVar = Array(1, 2, 3)
Dim anotherArray As Variant
anotherArray = service1.ReturnSomeArray(columnsVar)
我上面的最后一行总是遇到问题。我不明白为什么如果我能够从我的WCF服务返回一个数组,我无法将同一个数组作为参数传递给另一个WCF函数。
我收到序列化错误。
任何帮助都将不胜感激。
答案 0 :(得分:2)
只有当我以这种方式在VBA中声明数组变量时,我才会遇到Type mismatch
错误的类似问题:
Dim anotherArray() As Variant
但如果变量以这种方式定义,则错误消失:
Dim anotherArray As Variant
您和我的类似解决方案之间的其他一些差异是:
//C#- my solution- without array[] definition:
public object[] ReturnSomeArray(object someArray)
//VBA- my solution -without array() definition:
Dim someArray As Variant
编辑:2013-08-28
使用 C#-Excel-Interop 我更喜欢尝试和测试搜索解决方案的方式。如果有什么工作,那么我坚持下去,有时候我会错过指出解决方案或逻辑的来源。
您将在下面找到包含LINQ
代码的代码。这些代码片段在从C#到VBA的两个方向获取数据中工作&gt;&gt;将其传递回C#进行排序&gt;&gt;回到VBA。我希望它能帮助你最终解决你的问题。
首先:一些C#代码
public object[] GetSomeArray()
{
return new object[] { 5, 2, 1, 7, 9, 1, 5, 7 };
}
public double[] ArraySorted(object tablica)
{
object[] obj = (object[])tablica;
var filtr = from i in obj
orderby Convert.ToDouble(i)
select Convert.ToDouble(i);
double[] wynik = (double[])filtr.ToArray();
return wynik;
}
第二:一些VBA代码
Sub qTest_second_attempt()
'declare array variable
Dim tmp()
'and other variables
Dim addr As String
addr = "UDFArrayLinqTest.ArrayLinq"
'get references
Dim service1 As Object
Set service1 = CreateObject(addr)
'get array from C#
tmp = service1.GetSomeArray()
'pass this array to C# back to sort it
Dim someArray As Variant
someArray = service1.ArraySorted(tmp)
'check the result in Immediate window
Debug.Print Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(someArray)))
'result: 1 1 2 5 5 7 7 9
End Sub