如何在excel列中创建字母

本文关键字:创建 excel | 更新日期: 2023-09-27 18:19:10

我尝试创建一个像a,b,c,...z,aa,ab,ac,ad,ae,af,...,az,ba,bb,bc,...,bz,..zz,aaa,aab,aac..到给定number(N)

但是当我尝试使用for loops创建它时,我在元素中每秒钟创建一个for loop字符这意味着打印一个…z - loop1,一个a每第二个字母像a,我写一个新的for循环

是否可以用for循环创建这个类型系列…

如何在excel列中创建字母

方法如下:

    public static string GetExcelColumnName(int index)
    {
        int d = index;
        string name = "";
        int mod;
        while (d > 0)
        {
            mod = (d - 1) % 26;
            name = Convert.ToChar('a' + mod).ToString() + name;
            d = (int)((d - mod) / 26);
        }
        return name;
    }
    public static IEnumerable<string> GetExcelColumns(int n) {
        for (int i = 1; i <= n; i++)
        {
            yield return GetExcelColumnName(i);
        }
    }
    static void Main(string[] args)
    {
        int i = 1;
        foreach (var item in GetExcelColumns(900))
        {
            Console.Write(i++ + ": " + item + " ");
        }
        Console.WriteLine();
    }

GetExcelColumnName:

说明
//Suppose index = 1, `GetExcelColumnName` should return `"a"`.
    d = 1
    d > 0
        mod = (d - 1) % 26; //mod now is 0
        Convert.ToChar('a' + mod); // => That's 'a'
        //name now is "a"
        d = (d - mod) / 26 = (1 - 0) / 26 = 0 // d is now 0
    //End of While
    method returns "a"
//Suppose index = 28, `GetExcelColumnName` should return `"ab"`.
    d = 28
    d > 0
        mod = (d - 1) % 26; //mod now is 1 (27 modulo 26)
        Convert.ToChar('a' + mod); // => That's 'b'
        //name now is "b"
        d = (d - mod) / 26 = (28 - 1) / 26 = 1 // d is now 1
    d > 0
        mod = (d - 1) % 26; //mod now is 0 (0 modulo 26)
        Convert.ToChar('a' + mod); // => That's 'a'
        //name now is "ab"
        d = (d - mod) / 26 = (1 - 0) / 26 = 0 // d is now 0
    //End of While
    method returns "ab"

使用列表和推导式非常简单

例如python

alpha = ['a','b','c','d','e','f','g','h','i']
def merge(x,y):
    new = [ a+b for a in x for b in y]
    return new 
print(merge(alpha,alpha))
print(merge(alpha,merge(alpha,alpha)))

会给你你想要的。在c#中你可以找到一个等价的

(或者在f#中)

我认为正确的方法是将其视为以27为基数的数字,并跳过所有带有0的数字。您的数字是_abcdefghijklmnopqrstuvwxyz(_的值为0,z的值为26),您创建27个基数,如下所示:

nums_generated = 0
next_num = 1
while nums_generated < N:
   number_string = generate_base_27(next_num)
   if not '_' in number_string:
       print number_string
       num_generated = num_generated + 1
   next_num = next_num + 1

应该可以了。要使用给定的字符集创建以27为基数的数字,请查看下面的示例,并在需要以27为基数时进行适当的更正。