【问题标题】:Cannot implicitly convert type 'object' to 'object[*,*]'. An explicit conversion exists (are you missing a cast)无法将类型“object”隐式转换为“object[*,*]”。存在显式转换(您是否缺少演员表)
【发布时间】:2019-09-24 11:46:12
【问题描述】:

我需要将 Range 的值赋给多维对象但出现错误:

无法将类型 object 隐式转换为 object[*,*]。存在显式转换(您是否缺少演员表?)

代码如下:

Excel.Application oXL = new Excel.Application();
Excel.Workbook oWB = oXL.Workbooks.Open(rtbExcelPath.Text.Trim(), Missing.Value, 
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value);

Excel.Worksheet oWS = oWB.Worksheets[1] as Excel.Worksheet;

int countRows = oWS.UsedRange.Rows.Count;
int countColumns = oWS.UsedRange.Columns.Count;

object[,] data = oWS.Range[oWS.Cells[1, 1], oWS.Cells[countRows, 
countColumns]].Cells.Value2;

请帮忙检查一下有什么问题... :(

【问题讨论】:

  • 哪一行会报错?是在您尝试打开工作簿时吗?
  • 这个:object[,] data = oWS.Range[oWS.Cells[1, 1], oWS.Cells[countRows, countColumns]].Cells.Value2;
  • Value2 返回特定单元格的值,它不会是数组。谷歌“c# excel copy range into array”找代码,点击太多,推荐最好的。

标签: c# excel excel-interop


【解决方案1】:

我能够通过使用 dynamic 变量类型而不是显式类型 object[,] 来解决您的问题。

dynamic data = oWS.Range[oWS.Cells[1, 1], oWS.Cells[countRows, 
countColumns]].Cells.Value2;

【讨论】:

  • 如何将其转换为多维对象?因为我的代码需要一个多维对象数组..
  • 如果不深入 Interop.Excel 命名空间,您能否通过嵌套循环将每个单元格值提取到多维数组中?
  • 我需要一个嵌套循环,这就是我需要多维对象数组的原因。因为我真正想要的是使用来自stackoverflow.com/questions/17577184/… 的答案,但我不能这样做,因为我不能成功拥有对象[,]数据
  • 我添加了一个将单元格值提取到多维数组的示例。希望这能让您朝着有效的解决方案迈进。
  • 我需要一个嵌套循环,这就是我需要多维对象数组的原因。因为我真正想要的是使用来自stackoverflow.com/questions/17577184/的答案...但我做不到这是因为我无法成功拥有对象 [,] 数据
【解决方案2】:

oWS.UsedRange 引用单个单元格时会出现此问题。在这种情况下,返回的对象是单个值而不是数组。如果你想要一个数组,你需要测试这种情况并显式创建它。

object[,] data;
if (oWS.UsedRange.Cells.CountLarge == 1)
{
    // create a single cell two dimensional array with 1 based 
    // lower bounds to simular to an array returned by Excel
    data = (object[,])Array.CreateInstance(typeof(object), new[]{1, 1}, new[]{1, 1});
    data[1, 1] = oWS.UsedRange.Value2;
}
else
{
    data = oWS.UsedRange.Value2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多