我有一个如下所示获得的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 [,]'。
是否有一种简单的方法可以将电子表格中的数据作为双打数组获取?我可以遍历数组中的每个元素,但似乎不应该这样。
答案 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();
希望这有帮助。