想写一个命名的方法
要求如下,
第一个命名为A,第二个为B依此类推,当第二十六个命名为Z的时候,第二十七个命名为AA,二十八为AB,二十九为AC。依此类推,一直命名到AZ,下一个命名则为AAA,反复重复这一命名方法。
有点类似于excel的列名。
有没有哪位大侠有例子或者思路什么的
先拜谢了
要求如下,
第一个命名为A,第二个为B依此类推,当第二十六个命名为Z的时候,第二十七个命名为AA,二十八为AB,二十九为AC。依此类推,一直命名到AZ,下一个命名则为AAA,反复重复这一命名方法。
有点类似于excel的列名。
有没有哪位大侠有例子或者思路什么的
先拜谢了
解决方案 »
- C#怎样读ANSI编码的文本文件里的中文
- 如何向XML文档中插入数据?
- 大哥们,请帮帮忙!!急!!!
- string[] s = {"wssmax"};和string s="wssmax"有什么区别阿?
- ********* 搞过 sap 的看过来,乱码问题,焦急在线等!!!! *************
- 关于图片读取显示的问题~~急急急~大家帮忙看看啊!!
- 求一句级联删除的SQL语句--唯一的10分了,麻烦帮帮忙.
- 用激光打印机在A4纸上打印入库单,想打印二份,能实现连打吗?
- 【】向qq一样的发送快捷键,怎样实现??
- 谁能告诉我,ilasm.exe在那里有啊!!!急用(在线等待)
- 新人最近问题有点多 麻烦各位在给看一下
- 打卡机消息注册
ABA-ABZ这样的excel的列名方法
说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
ABA-ABZ这样的excel的列名方法
说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
ABA-ABZ这样的excel的列名方法
{
string return_str = string.Empty;
Regex _reg=new Regex (@"(?i)([a-z]*?)([a-z])$");
Match m=_reg.Match(oldVersion);
string begin_str = m.Groups[1].Value;
string end_str = m.Groups[2].Value;
return_str+=begin_str.ToUpper();
if (!string.IsNullOrEmpty(end_str))
{
if (end_str.Equals("Z", StringComparison.InvariantCultureIgnoreCase))
{
return_str += "AA";
}
else
{
byte[] array = new byte[1];
array = System.Text.Encoding.ASCII.GetBytes(end_str); //string转换的字母
int asciicode = (short)(array[0]);
array[0] = (byte)(++asciicode); //ASCII码强制转换二进制
return_str += Convert.ToString(System.Text.Encoding.ASCII.GetString(array)).ToUpper();
}
}
return return_str;
}
调用 string sss = null;
sss=GetHighVersion("a");//B
sss = GetHighVersion("aa");//AB
sss = GetHighVersion("z");//AA
sss = GetHighVersion("az");//AAA
说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
ABA-ABZ这样的excel的列名方法
用最简单的用数组char[]存储命名,索引0表示右数第一位,1表示右数第二位,依次。
然后取每个元素的ascii码,来获取具体的字符
定义一个获取数组表示的字符串的方法
再自定义一个+操作符或者加法方法,用以对当前表示的字符串命名递增一次。没什么难的啊。
{
//oldName = "Z"
// 定义一个 A-Z的数组
string []strArray = {"A","B","C","D",...,"Z"};
chart []nameArray = oldName.ToCharArray();
int nameIndex = 0;
string returnStr = string.Empty;
for(int i = 0; i < nameArray.Length; i++)
{
int currentVal = 0;
for(int j = 0; j < strArray.Length; j++)
{
if(nameArray[i].ToString().Trim().Equals(strArray[j].Trim()))
{
currentVal = j;
nameIndex *= currentVal;
break ;
}
}
}
nameIndex ++ ;
if(nameIndex > 25)
{
returnStr = strArray[nameIndex % 26];
int round = 0 ;
for(int k = nameIndex, k >= 1; k /= 26)
{
if(k == 1)
{
if(round < 26)
{
returnStr = strArray[round]+ returnStr;
}
else
{
returnStr = strArray[round % 26]+ returnStr;
k = round ;
round = 0;
}
}
round ++ ;
}
}
else
{
returnStr = strArray[nameIndex].Trim();
}
//return AA
return returnStr;
}
/// <summary>
/// 获取第n个
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
string GetString(int n)
{
const int BASE = 'A' - 1;
string s = string.Empty;
while (n > 0)
{
int r = n % 26;
if (r == 0)
r = 26;
s = (char)(BASE + r) + s;
n -= r;
n /= 26;
}
return s;
}/// <summary>
/// 获取下一个或几个
/// </summary>
/// <param name="s"></param>
/// <param name="n"></param>
/// <returns></returns>
string GetNext(string s, int n = 1)
{
const int BASE = 'A' - 1;
int len = s.Length;
int r = 0;
for (int i = 0; i < len; i++)
{
r += (s[i] - BASE) * (int)Math.Pow(26, len - i - 1);
}
return GetString(r + n);
}
char []nameArray = oldName.ToCharArray();
public string AddColNameByOld(string oldName)
{
//oldName = "Z"
string []strArray = {"A","B","C","D",...,"Z"};
char []nameArray = null;
int nameIndex = 0;
string returnStr = string.Empty;
nameArray = oldName.ToCharArray();
for(int i = 0; i < nameArray.Length; i++)
{
int currentVal = 0;
for(int j = 0; j < strArray.Length; j++)
{
if(nameArray[i].ToString().Trim().Equals(strArray[j].Trim()))
{
currentVal = j;
nameIndex *= currentVal;
break ;
}
}
}
nameIndex ++ ;
if(nameIndex > 25)
{
returnStr = strArray[nameIndex % 26];
int round = 0 ;
for(int k = nameIndex, k >= 1; k /= 26)
{
if(k == 1)
{
if(round < 26)
{
returnStr = strArray[round]+ returnStr;
}
else
{
returnStr = strArray[round % 26]+ returnStr;
k = round ;
round = 0;
}
}
round ++ ;
}
}
else
{
returnStr = strArray[nameIndex].Trim();
}
//return AA
return returnStr;
}
nameIndex *= currentVal;
=>
nameIndex = (nameIndex != 0?nameIndex:1)* currentVal;