为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取创建的对象“单元格”的范围?

如何获取创建的对象“单元格”的范围?

C#
森栏 2023-07-22 18:15:29
我正在 Visual Studio 中设置一个 26x26 电子表格程序。我创建了一个cell继承 textbox 但还包含一个 property 的对象cellID。现在我创建了一个selectedRange文本框,允许用户输入将执行公式(例如:Sum)的范围(例如:“A1:A9”)。我想获取输入的范围并找到一种算术上使用它的方法。我想也许我可以使用Split()带有 a':'和','分隔符的方法,但我不知道如何构建它以便在我的代码中使用。程序截图:private void btn_sum_Click(object sender, EventArgs e){    int rows = 0;    int columns = 0;     string[] cells = txt_selectedRange.Text.Split(':',',');}
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

在Excel中,您可以拥有像这样的复杂范围字符串:“D6:F11,I6:I9,J14,N10,P5:Q9”,因此首先您需要用“,”分割,然后对于每个包含“:”的子字符串,您需要获取单元格的子范围。


Hear 是一种获取范围字符串、解析它并返回单元格字符串列表的方法:


private static List<string> GetCellStrings(string cellRange)

{

    // Cell string to return from this method.

    List<string> cells = new List<string>();


    // Remove whitespace.

    cellRange = cellRange.Replace(" ", "").Trim();


    // First split by ',' to get subranges

    string[] subranges = cellRange.Split(',');


    // Iterate over subranges

    for (int i = 0; i < subranges.Length; i++)

    {

        string range = subranges[i];


        // If the subrange contains a ':', calculate all range cells

        if (range.Contains(':'))

        {

            string[] rangeBounds = range.Split(':');

            char lowerBoundLetter = rangeBounds[0][0];

            char upperBoundLetter = rangeBounds[1][0];

            int lowerBoundNumber = int.Parse(rangeBounds[0].Substring(1));

            int upperBoundNumber = int.Parse(rangeBounds[1].Substring(1));


            for (char columnLetter = lowerBoundLetter; columnLetter <= upperBoundLetter; columnLetter++)

            {

                for (int rowNumber = lowerBoundNumber; rowNumber <= upperBoundNumber; rowNumber++)

                {

                    string cell = columnLetter.ToString() + rowNumber.ToString();

                    cells.Add(cell);

                }

            }

        }

        // If the subrange does not contain a ':', it's a single cell, add it to the list of cells

        else

        {

            cells.Add(range);

        }

    }


    return cells;

}

注意:此代码仅适用于 26 列 - A 到 Z。


例子:


string cellRange = "D6:F11,I6:I9,J14,N10,P5:Q9";


List<string> cells = GetCellStrings(cellRange);


for (int i = 0; i < cells.Count; i++)

{

    Console.WriteLine(cells[i]);

}

输出:


D6

D7

D8

D9

D10

D11

E6

E7

E8

E9

E10

E11

F6

F7

F8

F9

F10

F11

I6

I7

I8

I9

J14

N10

P5

P6

P7

P8

P9

Q5

Q6

Q7

Q8

Q9


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信