版友风中漫步同志问如何得到如同Excel列的字母列表,恰好最近在一个MVC嵌入Excel表的项目开发中也涉及到此问题。由于项目中实际最多取到AH列,所以函数写的相对简单一些。风中漫步同志提出要在2000以内取字母的组合,这就超过了ZZ(也就是超过了26的2次方),版友盗梦同志认为比较难处理。其实这个问题本质上是一个10进制转换为26进制,然后取其各个位数上的值的问题。所以只要写出一个通用的10进制转n进制的函数即可。
对这个问题版友roych同志认为没什么意义。我对此不这么看,原因在于我们在处理Excel表的列(column)时,有很多时候需要用户对列做出选择。由于Excel表的列名是字母组合而非数字,因此从方便用户的角度来看,提供给用户选择的是列名而非数字要更好一些。否则,用户需要数出列名对应的数字再输入,那对用户来说多少有些麻烦。
解决这个问题,还有一个技巧性的问题,那就是呈现多少数据给用户进行选择。一般来说,给用户的数据不宜太多,有十个八个就行了。问题是选择的范围并非十个八个,可能有很多,甚至可以假设为无上下限。这个情况下就需要通过一些技巧来动态的给用户提供数据。我个人喜欢的处理是,以用户的选择为中间数,以此来得到那些要呈现给用户的数据,这样每次用户的选择都改变数据呈现的范围。
在以下示例中,我们假设用户需要两个组合框来选择数据。其中一个是年度,一个是Excel表列名。这两个组合框的行来源为不同函数,在组合框的更新后事件中,调用函数来得到数据的呈现范围。两个组合框处理的基本思路是相同的,也就是说其他类似的组合框均可按这个思路处理。不同的是,Excel表列名需要依赖一个十进制转换n进制函数来计算数据。
示例:点击下载此附件
视图: