关于excel中列名的操作
今天做关于excel的操作,发现excel的数值使用的是A-Z来标识,特用以下代码进行了转换!
规则是:从A到Z,遇Z进1,现支持表示范围为A-ZZ。
使用方法:
定义该类:EN e = new EN();
操作:e++,e = e + 1
取得表示值:string s = e.ToString();
internal struct EN
{
private int val;
internal EN(char c)
{
val = Convert.ToInt32(c) - Convert.ToInt32('A');
}
public static EN operator +(EN e1, int i)
{
e1.val += i;
return e1;
}
public static EN operator ++(EN e)
{
e.val++;
return e;
}
public static EN operator --(EN e)
{
e.val--;
return e;
}
public static bool operator ==(EN e, string s)
{
return e.ToString() == s;
}
public static bool operator !=(EN e, string s)
{
return e.ToString() != s;
}
public void SetValue(string s)
{
if (s == String.Empty) return;
s = s.ToUpper();
char[] cs = s.ToCharArray();
char c = cs[cs.Length - 1];
if (c > Convert.ToInt32('Z') || c < Convert.ToInt32('A')) return;
val = Convert.ToInt32(c) - Convert.ToInt32('A');
if (cs.Length >= 2)
{
c = cs[cs.Length - 2];
val = (Convert.ToInt32(c) - Convert.ToInt32('A') + 1) * 26 + val;
}
}
public override string ToString()
{
int residue = val % 26;
int integer = val / 26;
char c2 = Convert.ToChar(Convert.ToInt32('A') + residue);
char c1 = Convert.ToChar(Convert.ToInt32('A') + integer - 1);
return (c1 < Convert.ToInt32('A')) || (c1 > Convert.ToInt32('Z')) ? String.Format("{0}", c2) : String.Format("{0}{1}", c1, c2);
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}

浙公网安备 33010602011771号