繁体   English   中英

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

[英]How to get range of created object 'cells'?

我正在 Visual Studio 中设置一个 26x26 的电子表格程序。 我创建了一个对象cell ,它继承了文本框,但还包括一个属性cellID 现在我创建了一个selectedRange文本框,它允许用户输入一个范围(例如:'A1:A9'),在该范围内执行一个公式(例如:Sum)。 我想获取输入的范围并找到一种算术使用它的方法。

我想也许我可以使用带有':'','分隔符的Split()方法,但我不知道如何构造它以便在我的代码中可用。

程序截图:

在此处输入图片说明

private void btn_sum_Click(object sender, EventArgs e)
{
    int rows = 0;
    int columns = 0; 

    string[] cells = txt_selectedRange.Text.Split(':',',');
}

在 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

暂无
暂无

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

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