C# 通过行和列直接读取Excel中数据的方法

之前的项目中要频繁的读取Excel中某行某列的数据, 如果每次都是从下标0开始进行字符串的拼接, 这实在不是我等懒人的一贯作风.为此, 写了部分代码,来通过行和列的值直接读取Excel中对应单元格的数据.

读取Excel到DataTable中的方法, 传送门: https://blog.youkuaiyun.com/a33130317/article/details/90018777

// 转换excel的列名为数字的字典
private Dictionary<string, int> columnNameConvertInt = new Dictionary<string, int>();

#region 读取excel中某一个单元格的数据
// 输入excel实际的行列, 则读取DataTable中对应的数据
private string getExcelData(DataTable dt, int x, string y) {
    int column = this.columnNameConvertInt[y.ToLower()];
    if(dt.Rows[x - 1][column].ToString().Equals("")) {
        return "";
    }
    return dt.Rows[x - 1][column].ToString();
}

// 设置columnNameConvertInt属性: 将excel的列名转成int
private void setColumnNameConvertInt() {
    columnNameConvertInt.Add("a", 0);
    columnNameConvertInt.Add("b", 1);
    columnNameConvertInt.Add("c", 2);
    columnNameConvertInt.Add("d", 3);
    columnNameConvertInt.Add("e", 4);
    columnNameConvertInt.Add("f", 5);
    columnNameConvertInt.Add("g", 6);
    columnNameConvertInt.Add("h", 7);
    columnNameConvertInt.Add("i", 8);
    columnNameConvertInt.Add("j", 9);
    columnNameConvertInt.Add("k", 10);
    columnNameConvertInt.Add("l", 11);
    columnNameConvertInt.Add("m", 12);
    columnNameConvertInt.Add("n", 13);
    columnNameConvertInt.Add("o", 14);
    columnNameConvertInt.Add("p", 15);
    columnNameConvertInt.Add("q", 16);
    columnNameConvertInt.Add("r", 17);
    columnNameConvertInt.Add("s", 18);
    columnNameConvertInt.Add("t", 19);
    columnNameConvertInt.Add("u", 20);
    columnNameConvertInt.Add("v", 21);
    columnNameConvertInt.Add("w", 22);
    columnNameConvertInt.Add("x", 23);
    columnNameConvertInt.Add("y", 24);
    columnNameConvertInt.Add("z", 25);
    columnNameConvertInt.Add("aa", 26);
    columnNameConvertInt.Add("ab", 27);
    columnNameConvertInt.Add("ac", 28);
    columnNameConvertInt.Add("ad", 29);
    columnNameConvertInt.Add("ae", 30);
    columnNameConvertInt.Add("af", 31);
    columnNameConvertInt.Add("ag", 32);
    columnNameConvertInt.Add("ah", 33);
    columnNameConvertInt.Add("ai", 34);
    columnNameConvertInt.Add("aj", 35);
    columnNameConvertInt.Add("ak", 36);
    columnNameConvertInt.Add("al", 37);
    columnNameConvertInt.Add("am", 38);
    columnNameConvertInt.Add("an", 39);
    columnNameConvertInt.Add("ao", 40);
    columnNameConvertInt.Add("ap", 41);
    columnNameConvertInt.Add("aq", 42);
    columnNameConvertInt.Add("ar", 43);
    columnNameConvertInt.Add("as", 44);
    columnNameConvertInt.Add("at", 45);
    columnNameConvertInt.Add("au", 46);
    columnNameConvertInt.Add("av", 47);
    columnNameConvertInt.Add("aw", 48);
    columnNameConvertInt.Add("ax", 49);
    columnNameConvertInt.Add("ay", 50);
    columnNameConvertInt.Add("az", 51);
}
#endregion

读取第2行,第A列的数据的方法(列名大小写均可):

getExcelData(dt, 2, "a")

2019年6月21日, 将setColumnNameConvertInt()方法重新修改如下:

// 设置columnNameConvertInt属性: 将excel的列名转成int
private void setColumnNameConvertInt() {
    int endNum = 260;               // 需要读取多少个列
    char startChar = 'a';           // 初始的列名
    int preNum = 0;                 // 列名的前一个计数

    // 循环赋值列名的前一个字母
    Dictionary<int, string> preString = new Dictionary<int, string>();
    for(int i = 0;i < 27;i++) {
        if(i == 0) {
            preString.Add(i, "");
        } else {
            preString.Add(i, startChar.ToString());
            startChar++;
        }
    }

    // 循环赋值列名和对应的int
    startChar = 'a';
    for(int i = 0; i < endNum; i++) {
        preNum =  i / 26;
        columnNameConvertInt.Add(preString[preNum] + startChar.ToString(), i);
        startChar++;
        if((i+1)%26 == 0) {
            startChar = 'a';
        }
    }
}

说明: 

1. endNum 是需要读取的列数, 可以事先声明, 也可以读取TextBox中输入的数值 

 2. 如果已在程序中声明了要读取的列数, 就可以将setColumnNameConvertInt()方法放入构造函数内, 使其在构造函数内执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值