如何将列号(例如127)转换为Excel列(例如AA)

如何在 C # 中将数字转换为 Excel 列名称,而无需使用直接从 Excel 获取值的自动化。

如何在 C # 中将数字转换为 Excel 列名称,而无需使用直接从 Excel 获取值的自动化。

Excel 2007 的可能范围为 1 到 16384,这是它支持的列数。结果值应采用 excel 列名的形式,例如 A,AA,AAA 等。

1022

下面是我如何做到这一点:

private string GetExcelColumnName(int columnNumber)
{
    string columnName = "";
    while (columnNumber > 0)
    {
        int modulo = (columnNumber - 1) % 26;
        columnName = Convert.ToChar('A' + modulo) + columnName;
        columnNumber = (columnNumber - modulo) / 26;
    } 
    return columnName;
}
65

如果有人需要在没有 VBA 的 Excel 中执行此操作,这里有一种方法:

=SUBSTITUTE(ADDRESS(1;colNum;4);"1";"")

其中 colNum 是列号

在 VBA 中:

Function GetColumnName(colNum As Integer) As String
    Dim d As Integer
    Dim m As Integer
    Dim name As String
    d = colNum
    name = ""
    Do While (d > 0)
        m = (d - 1) Mod 26
        name = Chr(65 + m) + name
        d = Int((d - m) / 26)
    Loop
    GetColumnName = name
End Function
27

对不起,这是 Python 而不是 C #,但至少结果是正确的:

def ColIdxToXlName(idx):
    if idx < 1:
        raise ValueError("Index is too small")
    result = ""
    while True:
        if idx > 26:
            idx, r = divmod(idx - 1, 26)
            result = chr(r + ord('A')) + result
        else:
            return chr(idx + ord('A') - 1) + result
for i in xrange(1, 1024):
    print "%4d : %s" % (i, ColIdxToXlName(i))
25

您可能需要两种方式的转换,例如从 Excel 列地址如 AAZ 到整数,从任何整数到 Excel。下面的两种方法将做到这一点。假设 1 基于索引,您的“数组”中的第一个元素是元素编号 1。这里没有大小限制,所以你可以使用像 ERROR 这样的地址,这将是列号 2613824...

public static string ColumnAdress(int col)
{
  if (col <= 26) { 
    return Convert.ToChar(col + 64).ToString();
  }
  int div = col / 26;
  int mod = col % 26;
  if (mod == 0) {mod = 26;div--;}
  return ColumnAdress(div) + ColumnAdress(mod);
}
public static int ColumnNumber(string colAdress)
{
  int[] digits = new int[colAdress.Length];
  for (int i = 0; i < colAdress.Length; ++i)
  {
    digits[i] = Convert.ToInt32(colAdress[i]) - 64;
  }
  int mul=1;int res=0;
  for (int pos = digits.Length - 1; pos >= 0; --pos)
  {
    res += digits[pos] * mul;
    mul *= 26;
  }
  return res;
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(801)
如何测试矩阵列表中是否存在矩阵(WordleProject)
上一篇
如何修复在archkde中检索镜像列表数据循环失败
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(57条)