Waver's blog

心境如秋

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

关于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();
        }

    }
posted on 2007-01-10 14:47  Waver  阅读(697)  评论(0)    收藏  举报