遇到一个动态列,N行数据的求和,但是求和时需要Excel列名(A,B,C。。。)当时觉得这太非常难了。后来仔细研究了下Excel列名,都是从A到Z,然后AA再到AZ,以此类推。
如此的话就好弄了。通过ASCII码来获取字母。
foreach (var item in dicColumns) { var subTotal = totalRow.CreateCell(item.Key); subTotal.SetCellType(NPOI.SS.UserModel.CellType.Numeric); byte[] array = new byte[1]; string strColName = string.Empty; if (item.Key >= 26) { int intGoup = item.Key / 26; array[0] = (byte)(64 + intGoup); //ASCII码强制转换二进制 strColName += Convert.ToString(System.Text.Encoding.ASCII.GetString(array)); array[0] = (byte)(65 + (item.Key % 26)); //ASCII码强制转换二进制 strColName += Convert.ToString(System.Text.Encoding.ASCII.GetString(array)); } else { array[0] = (byte)(64 + item.Key + 1); //ASCII码强制转换二进制 strColName = Convert.ToString(System.Text.Encoding.ASCII.GetString(array)); } subTotal.SetCellFormula("sum(" + strColName + "2" + " : " + strColName + intLastRowIndex + ")"); }
小小学习经历,但是我也度娘了一会,结果却没找到。希望此段代码能帮助有需要的人。如果大家有更好的解决方法也可以告知。多谢。