interop.excel将范围对象(,)转换为Double(,)

时间:2013-12-05 16:12:24

标签: vb.net excel-interop

我有一个如下所示获得的Microsoft.Office.Interop.Excel.Range对象:

Dim maxRow As Integer = currentSheet.UsedRange.Rows.Count
currentSheet.Range("A2").Resize(maxRow-1, 2).Value

我正在尝试将其转换为二维数组的双打,但如果我这样做:

Dim arrayData(,) As Double = currentSheet.Range("A2").Resize(maxRow - 1, 2).Value

我收到以下错误:

  

附加信息:无法投射类型的对象   'System.Object [,]'输入'System.Double [,]'。

是否有一种简单的方法可以将电子表格中的数据作为双打数组获取?我可以遍历数组中的每个元素,但似乎不应该这样。

2 个答案:

答案 0 :(得分:2)

使用Array.Copy()

Dim arrayData(,) As Double
Dim objData(,) As Object = currentSheet.Range("A2").Resize(maxRow - 1, 2).Value
Array.Copy(objData, arrayData, objData.Length)

顺便提一句,我将convert 2d object double放入搜索引擎...... How can I quickly up-cast object[,] into double[,]?

修改

我只是在自己的Excel工作表上试了一下它就可以了。我应该添加的一件事是,我需要在标注它时指定目标数组的边界。

'Dim objData(,) As Object = xlSheet.Range("C6:E14").Value ' either way works
Dim objData(,) As Object = xlSheet.Range("C6").Resize(9, 3).Value
Dim dblData(objData.GetUpperBound(0) - 1, objData.GetUpperBound(1) - 1) As Double
Array.Copy(objData, dblData, objData.Length)

您可以在运行时检查Object(,)以确保其中有数据吗?此外,所有内容都需要转换为Double

答案 1 :(得分:-1)

这是一个C#示例,但您不应该在将其转换为vb时遇到问题。

object[,] arrWks = (object[,])enuWorksheet.UsedRange.get_Value(XLS.XlRangeValueDataType.xlRangeValueDefault);

所以在你的情况下,而不是.Value,使用get_Value方法。

然后在迭代数组时,记得检查空值:

object objKom = arrWks[intRow, intCol];
string strKom = objKom == null ? "" : objKom.ToString();

希望这有帮助。