我正在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(':',',');
}
答案 0 :(得分:0)
在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 contains a ':', it is a single cell, add it to the list of cells
else
{
cells.Add(range);
}
}
return cells;
}
注意:该代码仅适用于A到Z的26个列字母。
示例:
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