10进制转26进制作为Excel列名

       [Test]
        
public void Test10To26()
        {
            Assert.AreEqual(
"A", GetColumnName(1));
            Assert.AreEqual(
"B", GetColumnName(2));
            Assert.AreEqual(
"Z", GetColumnName(26));
            Assert.AreEqual(
"ZZ", GetColumnName(26*26 + 26));
            Assert.AreEqual(
"ZZZ", GetColumnName(26 * 26 * 26 + 26 * 26 + 26));
            Assert.AreEqual(
"AA", GetColumnName(27));
            Assert.AreEqual(
"AB", GetColumnName(28));
            Assert.AreEqual(
"AC", GetColumnName(29));

            
int aaa = 1 * 26 * 26 + 1 * 26 + 1//AAA;
            Assert.AreEqual("AAA", GetColumnName(aaa));

            
int aab = 1 * 26 * 26 + 1 * 26 + 2;
            Assert.AreEqual(
"AAB", GetColumnName(aab));

            
int bbb = 2 * 26 * 26 + 2 * 26 + 2//AAA;
            Assert.AreEqual("BBB", GetColumnName(bbb));
        }
      
        
public string GetColumnName(int intValue)
        {
            
string result = "";
            
if (intValue <= 26)
            {
                result 
= (char)(intValue + 96+ result;
                
return result.ToUpper();
            }
           

            
int modOf26 = intValue % 26;

            
int left = 0;

            
if (modOf26 == 0)
            {
                result 
= 'Z' + result;
                left 
=  intValue - 26;
            }
            
else
            {
                result 
= (char)(modOf26 + 96+ result;
                left 
= intValue - modOf26;
            }



            
int nextInputValue = left / 26;

            
if (nextInputValue == 0)
                
return result.ToUpper();

            
if (nextInputValue > 26)
                result 
= GetColumnName(nextInputValue) + result;
            
else
                result 
= (char)(nextInputValue + 96+ result;

            
return result.ToUpper();
         
        }


原文地址:https://www.cnblogs.com/xhan/p/1635294.html