【问题标题】:Excel Interop - Insert Rows & RepeatExcel 互操作 - 插入行并重复
【发布时间】:2015-05-29 00:04:01
【问题描述】:

好的,所以我有这个函数可以很好地插入行,然后将数据放入这些行中。

public void inputRowData(string[] data, int rds)
    {
        int bestRow = getRowByRDS(rds);
        string val = getValueOfCell(bestRow, 6);
        if (val == null || val.Equals(""))
        {
            shiftRows(bestRow, data.Length-1);
            string[] formatedData = formatOutput(bestRow, data);
            // transform formated data into string[,]
            string[][] splitedData = formatedData.Select(s => s.Split('\t')).ToArray();
            var colCount = splitedData.Max(r => r.Length);
            var excelData = new string[splitedData.Length, colCount];
            for (int i = 0; i < splitedData.Length; i++)
            {
                for (int j = 0; j < splitedData[i].Length; j++)
                {
                    excelData[i, j] = splitedData[i][j];
                }
            }
            oSheet.get_Range("A" + bestRow.ToString()).Resize[splitedData.Length, colCount].Value = excelData;

        }
        else
        {
            Console.WriteLine("Line has some information already, skipping 1 more");
            shiftRows(bestRow, data.Length + 1);
        }

    }

现在,如果您看一下,我会找到“bestRow”,它由 excel 中的最后一行确定,特定列的 int 值显示在这里:

private int getRowByRDS(int id)
    {
        int bestfit = -1;
        Boolean foundOne = false;
        Microsoft.Office.Interop.Excel.Range usedRange = oSheet.UsedRange;
        for (int i = 2; i < usedRange.Rows.Count; i++)
        {
            string val = getValueOfCell(i, 3);
            if (val == null)
                continue;

            int rds = int.Parse(val);
            Console.WriteLine(val + " " +i);
            if (rds == id)
            {
                bestfit = i;
                foundOne = true;
            }
            else
                if (foundOne)
                    return bestfit;
        }
        return bestfit;
    }

发生的情况是,当它完成 inputRowData 方法中的数据集时,它将移动到具有不同 rds 值的另一个集。它会尝试调用 getRowByRDS 但会抛出错误。

在调试时,它看起来好像没有更新工作表......所以假设第一组 10 个字符串插入到第 900 行,如果下一组假设在它之后立即开始 bestRow 将返回 901 而不是 911 .

错误是

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in TTE Tool.exe

【问题讨论】:

  • 两个问题:1) 您能否确认所有单元格都按照您的预期进行了更新?有可能您的数组没有对齐,并且并非所有单元格都在更改。 2) 如果没问题,我的下一个猜测是这与使用UsedRange 有关。更改单元格后,此属性可能没有正确更新(不确定可能性有多大)。要对此进行测试,请使用.End() 方法之一来获取您正在使用的数据块。或者如果数据是连续的(没有空格),请使用CurrentRegion

标签: c# excel


【解决方案1】:

我发现了问题。我之前不小心把excel处理掉了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 2018-01-31
    • 2017-10-12
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多