range对象的value2属性即为表格区域的数组,类型为object[,]
VBA代码:
Function vb_mat_add(matA As Range, matB As Range) Dim addin As Variant Set addin = CreateObject("MathNetExcel.Functions") vb_mat_add = addin.mat_add2(matA.Value2, matB.Value2) End Function
如果传出处理.比如上例中传出给com组件作为参数,需要注意vb中数组是从1开始而不是从0开始.
也就是object[,] 索引是从 object[1~n,1~n] 而不是 object[0~n-1,0~n-1]
因此在com组件中进行一步转换
public static double[,] o2d(object[,] obj2) { int x = obj2.GetLength(0); int y = obj2.GetLength(1); double[,] d2 = new double[x, y]; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { d2[i, j] = Convert.ToDouble(obj2[i + 1, j + 1]); } } return d2; }将表格中内容转换为 double. 根据实际类型进行转换.如果不确定类型都转换为字符串数组是万能的