繁体   English   中英

Microsoft.Office.Interop IndexOutOfRangeException

[英]Microsoft.Office.Interop IndexOutOfRangeException

下面的IndexOutOfRangeException不允许我的代码运行(编译)。 虽然我了解这种异常(数组索引等),但问题是,我想做的只是使用单元格B [excelrow]中的值更新String subsection2。 由于某种原因,存在索引超出范围异常对我来说没有意义。 subsection2或excelrow都不是数组的一部分。 我能想到的唯一数组是excel数组,但是excelrow是一个值为3的整数,它应该更新为B3行,依此类推。 (我什至尝试直接用B3更新,但出现相同的错误)。

为了帮助您进一步了解上下文,此名为createsource的方法将excel电子表格和该工作表中的总行作为输入。 它执行以下代码以输出一个二维数组,该数组的第一个维度包含每个新订单(每个不同的客户)的excel索引,第二个维度是每个客户订购的商品数量。

代码的方法如下:

私人int [,] createsource(Microsoft.Office.Interop.Excel.Worksheet xlWorksheet,int totalRows){

        String subsection = "";
        object subsection2 = "";
        int orders = 0;

        //figures out how many different pages there are going to be
        for (int n = 3; n < totalRows + 1; n++)
        {
            if (!(xlWorksheet.get_Range("B" + n.ToString()).Text == subsection))
            {
                subsection = xlWorksheet.get_Range("B" + n.ToString()).Text;
                orders++;
            }
        }
        MessageBox.Show(orders.ToString());
        int[,] source = new int[orders, 2];

        int excelrow = 3;
        subsection2 = xlWorksheet.get_Range("B" + excelrow.ToString()).Text;
        int i;

        for (i = 0; i < orders + 1; i++)
        {
            int j = 1;
            if (excelrow == totalRows + 1)
            {
                break;
            }

 //Out of bounds exception is found in the below if statement updating subsection2:

            if (!(xlWorksheet.get_Range("B" + excelrow.ToString()).Text == subsection2))
            {
                source[i, 0] = excelrow;
                //MessageBox.Show(xlWorksheet.get_Range("B" + excelrow.ToString()).Text.ToString());
                subsection2 = xlWorksheet.get_Range("B" + excelrow.ToString()).Text;
                excelrow++;
            }

            for (int iter = 0; iter < 1;)
            {
                if (excelrow == totalRows + 1)
                {
                    break;
                }
                if (xlWorksheet.get_Range("B" + excelrow.ToString()).Text == subsection2)
                {
                    excelrow++;
                    j++;
                }
                if (!(xlWorksheet.get_Range("C" + excelrow.ToString()).Text == subsection2))
                {
                    subsection2 = xlWorksheet.get_Range("C" + excelrow.ToString()).Text;
                    iter = 1;
                }
            }

            source[i, 1] = j;

        }

        MessageBox.Show(source[2, 0].ToString());
        return source;

    }

我看到了问题。 您将来源声明为:

int[,] source = new int[orders, 2];

...好的,但是看看你的循环:

for (i = 0; i < orders + 1; i++)

...稍后输入:

source[i, 0] = excelrow;

好的,如果订单= 100,则您声明了一个100的长数组,范围是0-99。 然后循环,从0到“小于100 + 1”,也就是0-100。 当您到达最后一个循环时,您正在使用i = 100的值,并尝试将其放入不存在的数组点中。

您需要将循环减少一倍,或将数组大小增加一倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM