之前的项目中要频繁的读取Excel中某行某列的数据, 如果每次都是从下标0开始进行字符串的拼接, 这实在不是我等懒人的一贯作风.为此, 写了部分代码,来通过行和列的值直接读取Excel中对应单元格的数据.
读取Excel到DataTable中的方法, 传送门: https://blog.csdn.net/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)& == 0) { startChar = 'a'; } } }说明:
1. endNum 是需要读取的列数, 可以事先声明, 也可以读取TextBox中输入的数值
2. 如果已在程序中声明了要读取的列数, 就可以将setColumnNameConvertInt()方法放入构造函数内, 使其在构造函数内执行.