EXCEL列名与数字之间转换

来源:互联网 发布:手机赌博软件开发 编辑:程序博客网 时间:2024/05/14 13:34

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SDLearn1 {
    public partial class LearnForm : Form {


        private const int AlphaSpan = 26;   // 英文字母数

        public LearnForm() {
            InitializeComponent();
        }

        private void CalcButton_Click(object sender, EventArgs e) {
            var source = this.EntryTextBox.Text;
          
            try {
                if(string.IsNullOrEmpty(source) || source.Trim() == "") {
                    MessageBox.Show("入力がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                } else if(IsNumericOnly(source.Trim())) {
                    // 数字のみ

                    var result = GetColumnName(source.Trim());
                    MessageBox.Show(result);
                } else if(IsAlphaOnly(source.Trim())) {
                    // アルファベットのみ

                    var result = GetColumnNumber(source.Trim());
                    MessageBox.Show(result);
                } else {
                    // 上記以外の不正な文字を含む場合
                    MessageBox.Show("不正な文字が含まれています", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            } catch(ArgumentException ex) {
                MessageBox.Show(ex.Message, "パラメータエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } catch(Exception ex) {
                MessageBox.Show(ex.Message, "想定外の例外", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// 全部数字か
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        private bool IsNumericOnly(string source) {

            foreach(var ch in source) {
                if(ch < '0' || ch > '9') {
                    return false;
                }
            }

            return true;
        }

        /// <summary>
        /// 全部アルファベットか
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        private bool IsAlphaOnly(string source) {

            foreach(var ch in source.ToUpper()) {
                if(ch < 'A' || ch > 'Z') {
                    return false;
                }
            }

            return true;
        }

        /// <summary>
        /// カラム番号の取得
        /// </summary>
        /// <param name="source">カラム名を表す文字列</param>
        /// <returns>変換したカラム番号</returns>
        private string GetColumnNumber(string source) {

            var s = source.ToUpper().Trim();

            if(s.Length >= 5) {
                // 桁数が多い
                throw new ArgumentOutOfRangeException("source");
            }

            int no = 0;
            foreach(var ch in s) {
                var n = ch - 'A';

                no = no * AlphaSpan + n + 1;
            }

            return no.ToString();
        }

        /// <summary>
        /// カラム名の取得
        /// </summary>
        /// <param name="source">カラム番号を表す文字列</param>
        /// <returns>変換したカラム名</returns>
        private string GetColumnName(string source) {

            int s;
            if(!int.TryParse(source, out s)) {
                throw new ArgumentException();
            }

            if(s <= 0){
                // 0以下は対象外
                throw new ArgumentOutOfRangeException("source");
            }

            string name = "";
            while(s > 0) {
                s--;
                int rest = s % AlphaSpan;

                name = (char)(rest + 'A') + name;
                s = s / AlphaSpan;
            }

            return name;
        }
    }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 玫瑰金链子黑了怎么办 18k玫瑰金变黑了怎么办 玫瑰金戒指遇到火变黑怎么办 18k白金发黄了怎么办 18k金掉色后怎么办吗 dw手表金色掉漆怎么办 dw玫瑰金手表褪色怎么办 dw金色表带黑了怎么办 机械表机芯坏了怎么办 银镀玫瑰金褪色怎么办 苹果七p玫瑰金掉漆怎么办 美度镀金表掉色怎么办 吃了发黑的香菇怎么办 脸上的皮肤暗黄怎么办 吃了变黑的香菇怎么办 怀孕喝了玫瑰茶怎么办 孕妇爱喝茉莉茶怎么办 干菊花生虫了该怎么办 黑枸杞放了两年怎么办 来大姨妈喝茶了怎么办 干柠檬片过期了怎么办 山地玫瑰根黑了怎么办 带18k的金过敏怎么办 18k钻戒断了怎么办 18k钻戒戒托变色怎么办 苹果七中间按键脱漆怎么办 苹果手机屏幕边缘掉漆了怎么办 十八k白金变色了怎么办 手机后面掉漆了怎么办 玫瑰金戒指刮花了怎么办 玫瑰金手镯刮花了怎么办 玫瑰金链子断了怎么办 dw玫瑰金掉色了怎么办 6s玫瑰金氧化了怎么办 书本湿的很严重怎么办 除湿盒的水满了怎么办 书被水泡变黄了怎么办 文件纸被弄皱了怎么办 纸的一角皱了怎么办 裤子被雨水打湿变色了怎么办 书本上粘了有油怎么办