Excel互操作效率获取行数与值在一列

本文关键字:一列 效率 互操作 获取 Excel | 更新日期: 2023-09-27 17:51:08

目前,我正在使用下面的代码段来获得第3列中值为int的行。

        private int getRowByRDS(int id)
    {
        int bestfit = -1;
        Boolean foundOne = false;
        for (int i = 2; i < oSheet.Rows.Count; i++)
        {
            string val = getValueOfCell(i, 3);
            if (val == null)
                continue;
            int rds = int.Parse(val);
            if (rds == id)
            {
                bestfit = i;
                foundOne = true;
            }
            else
                if (foundOne)
                    return bestfit;
        }
        return bestfit;
    }

问题是,这是可悲的显示在大量的行。

有没有人建议一种更好的方法,在col3中搜索int并返回它所在的最后一行# ?

乔:

public void inputRowData(string[] data, int rds)
    {
        int bestRow = getRowByRDS_a(rds);
        string[] formatedData = formatOutput(bestRow, data);
        string val = getValueOfCell(bestRow, 6);
        if (val != null)
        {
            shiftRows(bestRow, data.Length);
            bestRow++;
        }
        else
            shiftRows(bestRow, data.Length - 1);
        // 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;
        MainWindow.mainWindowDispacter.BeginInvoke(new System.Action(() => MainWindow.mainWindow.debugTextBox.AppendText("Done with " + rds + " input!" + Environment.NewLine)));
    }

    private void shiftRows(int from, int numberof)
    {
        from++;
        Range r = oXL.get_Range("A" + from.ToString(), "A" + from.ToString()).EntireRow;
        for (int i = 0; i < numberof; i++)
            r.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown);
    }

Excel互操作效率获取行数与值在一列

我是这样做的:

  • 获取与您感兴趣的列对应的Range
  • 获取您感兴趣的工作表的userange
  • 获取上述两个范围的交集
  • 获取Range的值,这将是您感兴趣的列的值的数组

你可以遍历这个数组来找到你想要的值,然后使用它的索引来得到行号。

使用上述方法调用Excel的次数是O(1),而不是您的版本中的O(n)。

您也可以使用Excel的Find方法。对象范围。这个方法返回一个Excel。如果找到匹配项,则为范围对象,否则为空。按照Joe描述的前三个步骤创建搜索范围。如果Find方法返回一个有效的Range,那么您可以使用它的Row属性。

注:对不起,乔,我想给你的答案投票,但是我还不能这么做。