(object [,])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault)导致转换错误

时间:2011-09-12 04:24:19

标签: c# .net excel interop excel-interop

错误:

Cannot convert type 'string' to 'object[*,*]'

这是我一直在犯的错误。有人可以给我一些指示,以便我可以避免吗?感谢。

注意:

有趣的是,(object[,])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault)

只会在range.Count == 1时产生此错误。当count等于或大于2时,它工作正常。

示例代码:

object[,] arrValue;  //global variable

private string[] createFormulaCollection()
        {
            ArrayList s = new ArrayList();
            try
            {
                //look at the currently active excel sheet
                //iterate through cells (not Null) and find the one contains IES(...)
                //save it into the arraylist
                //use dictionary to save position and value (position as key)
                workbook = Globals.ThisAddIn.Application.ActiveWorkbook;
                worksheet = Globals.ThisAddIn.Application.ActiveSheet;
                range = worksheet.UsedRange;

                MessageBox.Show(range.Count.ToString());


                if (range.Count > 1)
                {
                    //need to make sure there are at least 2 "ies" cells before converting to object[,]
                    arrValue = (object[,])range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault); 
                }
                else
                {
                    arrValue[1,1] = range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault); //my try here. seems still got problem though.
                }


            catch (Exception ex)
            {

            }
            return (string[])s.ToArray(typeof(string));
        }

2 个答案:

答案 0 :(得分:1)

查找

当range.Count == 1时,

range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault);将返回一个字符串 这意味着它无法转换为object [,]类型。

然而,当range.Count> 1。

我的解决方法:

单独处理它。所以在我的情况下,我必须首先计算范围对象的数量并相应地处理它们。

if(range.Count > 1)
{
    //code...
}
else
{
    string singleStrValue = range.get_Value(XL.XlRangeValueDataType.xlRangeValueDefault);
    int iRow, iCol;
    iRow = range.Row;
    iCol = range.Column;
    if (!string.IsNullOrEmpty(singleStrValue))
    {
        //code...
    }
}

答案 1 :(得分:0)

是否适用于

(object[,])range.get_Value(System.Reflection.Missing.Value);