簡體   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