从 C# 中的索引获取 .xlsx 列名
Get .xlsx column name from index in C#
我想创建一个将数字转换为 .csv 文件列的函数。
例如:
- 数字 5 -> 列 E
- 数字 29 -> 列 AB
等等..
到目前为止我已经实现了这个功能:
public class Test
{
public static string GetColumn(int index)
{
StringBuilder col = new StringBuilder();
const int alpha_count = 26;
char alpha = (char)64;
if (index <= alpha_count)
{
col.Append(((char)(alpha + index)).ToString());
}
else
{
// I am stuck here....
}
return col.ToString();
}
static void Main(string[] args)
{
var col = Test.GetColumn(1);
}
}
如果数字超过 26(字母表的长度),我会卡住。
这是您提出的问题,但我必须指出,我同意@Martin Holy 的回答:如果可能,经过测试的用户权限工具经过修补。
public static string GetColumn(int index)
{
StringBuilder col = new StringBuilder();
const int alpha_count = 26;
char alpha = (char)64;
int div = index / 26;
if (div > 0)
{
col.Append(((char)(alpha + div)).ToString());
}
col.Append(((char)(alpha + (index - (div * 26)) )).ToString());
return col.ToString();
}
我以前用过这个,应该像你描述的那样工作……这来自……
Convert an Excel column number to a column name or letter:
此外,除非我遗漏了什么……不会是 29 -> AC 吗?
… 26=Z, 27=AA, 28=AB 和 29=AC …
private static string ColumnIndexToColumnLetter(int colIndex) {
int div = colIndex;
string colLetter = String.Empty;
int mod = 0;
while (div > 0) {
mod = (div - 1) % 26;
colLetter = (char)(65 + mod) + colLetter;
div = (int)((div - mod) / 26);
}
return colLetter;
}
我想创建一个将数字转换为 .csv 文件列的函数。
例如:
- 数字 5 -> 列 E
- 数字 29 -> 列 AB
等等..
到目前为止我已经实现了这个功能:
public class Test
{
public static string GetColumn(int index)
{
StringBuilder col = new StringBuilder();
const int alpha_count = 26;
char alpha = (char)64;
if (index <= alpha_count)
{
col.Append(((char)(alpha + index)).ToString());
}
else
{
// I am stuck here....
}
return col.ToString();
}
static void Main(string[] args)
{
var col = Test.GetColumn(1);
}
}
如果数字超过 26(字母表的长度),我会卡住。
这是您提出的问题,但我必须指出,我同意@Martin Holy 的回答:如果可能,经过测试的用户权限工具经过修补。
public static string GetColumn(int index)
{
StringBuilder col = new StringBuilder();
const int alpha_count = 26;
char alpha = (char)64;
int div = index / 26;
if (div > 0)
{
col.Append(((char)(alpha + div)).ToString());
}
col.Append(((char)(alpha + (index - (div * 26)) )).ToString());
return col.ToString();
}
我以前用过这个,应该像你描述的那样工作……这来自……
Convert an Excel column number to a column name or letter:
此外,除非我遗漏了什么……不会是 29 -> AC 吗?
… 26=Z, 27=AA, 28=AB 和 29=AC …
private static string ColumnIndexToColumnLetter(int colIndex) {
int div = colIndex;
string colLetter = String.Empty;
int mod = 0;
while (div > 0) {
mod = (div - 1) % 26;
colLetter = (char)(65 + mod) + colLetter;
div = (int)((div - mod) / 26);
}
return colLetter;
}