将 行:1,4-5,8,11 列:a,c-e,f文章来源:https://www.toymoban.com/news/detail-738226.html
这种写法转换成单元格地址的方法。文章来源地址https://www.toymoban.com/news/detail-738226.html
public static Tuple<List<int>, List<string>> ConvertRowColumn(string rowRep, string colRep)
{
List<int> rowIdxs = new List<int>();
rowRep = rowRep.Replace(" ", "");
colRep = colRep.Replace(" ", "");
foreach (string item in rowRep.Split(','))
{
Match singleValM = Regex.Match(item, @"^(\d+)$");
Match rangeValM = Regex.Match(item, @"^(\d+)-(\d+)$");
if (singleValM.Success)
{
int rowIdx = int.Parse(singleValM.Groups[1].Value);
rowIdxs.Add(rowIdx);
}
else if (rangeValM.Success)
{
int a = int.Parse(rangeValM.Groups[1].Value);
int b = int.Parse(rangeValM.Groups[2].Value);
int start = Math.Min(a, b);
int end = Math.Max(a, b);
for (int i = start; i <= end; i++)
{
rowIdxs.Add(i);
}
}
else
{
//报错,不能识别
}
}
List<int> colIdxs = new List<int>();
foreach (string item in colRep.Split(','))
{
Match singleValM = Regex.Match(item, @"^([a-z]+)$", RegexOptions.IgnoreCase);
Match rangeValM = Regex.Match(item, @"^([a-z]+)-([a-z]+)$", RegexOptions.IgnoreCase);
if (singleValM.Success)
{
int colIdx = ColumnTitleToNumber(singleValM.Groups[1].Value);
colIdxs.Add(colIdx);
}
else if (rangeValM.Success)
{
int a = ColumnTitleToNumber(rangeValM.Groups[1].Value);
int b = ColumnTitleToNumber(rangeValM.Groups[2].Value);
int start = Math.Min(a, b);
int end = Math.Max(a, b);
for (int i = start; i <= end; i++)
{
colIdxs.Add(i);
}
}
else
{
//报错,不能识别
}
}
rowIdxs.Sort();
colIdxs.Sort();
List<string> colTitles = new List<string>();
foreach (int colIdx in colIdxs)
{
colTitles.Add(ColumnNumberToTitle(colIdx));
}
Tuple<List<int>, List<string>> rowsCols = new Tuple<List<int>, List<string>>(rowIdxs, colTitles);
return rowsCols;
}
private static int ColumnTitleToNumber(string columnTitle)
{
columnTitle = columnTitle.ToUpper();
int result = 0;
for (int i = 0; i < columnTitle.Length; i++)
{
result *= 26;
result += columnTitle[i] - 'A' + 1;
}
return result;
}
private static string ColumnNumberToTitle(int columnNumber)
{
string result = "";
while (columnNumber > 0)
{
int remainder = (columnNumber - 1) % 26;
result = (char)(remainder + 'A') + result;
columnNumber = (columnNumber - 1) / 26;
}
return result;
}
到了这里,关于Excel中行列范围的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!