解决方案 »

  1.   

    楼主,你一般用什么方法去读取excel,在我的项目中多用POI。
      

  2.   


    代码换成如下写法,估计你就能看得懂了,一开始我看这个方法的时候也不太明白,呵呵 /**
     * 
     * <per>
     * 依据:低进制换算高进制:二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……(累加)</br>
     * 二进制数:0110 0100,转换为十进制为(从个位开始  右-->左):Math.pow(底数,指数)进行次幂运算</br>
     * 0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 1 * 2^3 + 0 * 2^4 + 1 * 2^5 + 1 * 2^6 + 0 * 2^7 = 100</br> </br>
     * 延伸:将Excel列转换成索引:可以看做是十进制-->二十六进制 </br>
     * 二十六进制字母可以将每一个字母等价其ASIC码十进制的数值</br>
     * 示例:求AA列(65 65)的索引</br>
     * (65-64) * 260 + (65-64) * 261 = 27</br></br>
     * 说明:“二十六进制”的第一位(最小个位)就是A,ASIC码是65,所以每一个字母应相应减掉64,这样A(65)才是第一个</br>
     * </per>
     * @param strExcelColPlace Excel列字母
     * @return 对应十进制整数的索引
     */
    public static int switchAlphabetPlace(String strExcelColPlace) 
    {
    int exponent = 0;
    Double sum = 0.0;
    List<Double> itemList = new ArrayList<Double>();

    strExcelColPlace = strExcelColPlace.toUpperCase();

    byte[] arrByte = strExcelColPlace.getBytes();
    for (int i = arrByte.length - 1; i >= 0; i--) {
    double itemValue = (arrByte[i] - 64) * Math.pow(26,exponent);
    itemList.add(itemValue);
    exponent++;
    }

    for (Double dv : itemList) {
    sum = sum + dv;
    }

    return sum.intValue() - 1;
    }
      

  3.   

    这个不需要用到Math.pow吧。。虽然效率不是什么问题,但不喜欢这种大材小用
    另外getBytes也似乎不太好吧,你不指定具体字符集,那就按默认编码,但不同机器上的默认编码不同,搞不好会弄出乱码,
    而且字符串本来就是char数组实现的,直接toCharArray不就好了,开销小,不需要像getBytes编码要进行很多繁琐的工作 public static int alphabetToInt(String alpha) {
    alpha = alpha.toUpperCase();
    char[] chars = alpha.toCharArray();

    int result = 0;
    for (int i = 0; i < chars.length; i++) {
    result *= 26;
    result += chars[i] - 64;
    }

    return result - 1;
    }