gpt4 book ai didi

c# - 如何获取创建对象 'cells' 的范围?

转载 作者:行者123 更新时间:2023-11-30 17:26:04 26 4
gpt4 key购买 nike

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

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

程序截图:

enter image description here

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”,所以首先你需要用“,”分割,然后每个子字符串包含a ":"你需要获取单元格的子范围。

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

关于c# - 如何获取创建对象 'cells' 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57239798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com