操作Excel縱列(數值轉字母)
阿新 • • 發佈:2019-02-13
前兩天系統新增了一個報表分析的需求,需要給Excel新增函式,由於Excel縱列的元素是動態資料,無法確定各縱列在Excel中的下標,於是迂迴了下,遍歷資料建立縱列元素的時候儲存其下標數值,再將下標數值轉化為對應Excel縱列的A.B……AA.AB……,轉的時候比較麻煩,上網搜了下,發覺相關資訊很少,於是在這裡記錄一下,以備後用和參考。
1、忘記是哪位朋友的blog中的評論:
public static String getExcelColumnLabel(int index){
String rs = "";
do {
index --;
rs = ((char) (index % 26 + (int) 'A')) + rs;
index = (int) ((index - index % 26) / 26);
} while (index > 0);
return rs;
}
測試了一下:
System.out.println(getExcelColumnLabel(0)); //輸出@
System.out.println(getExcelColumnLabel(1)); //輸出A
System.out .println(getExcelColumnLabel(25)); //輸出Y
System.out.println(getExcelColumnLabel(26)); //輸出Z
System.out.println(getExcelColumnLabel(27)); //輸出AA
發覺上述方法下標是從1開始,而Excel縱列的下標是從0開始的,由於趕時間也就湊合著用吧,後來閒暇的時候就另外弄了一個下標從0開始的,方法如下:
/*****
* @author :QZC
* @createDate :2015年12月8日 下午3:49:54
* 函式功能描述:
* @param col 從0開始
* @return
*****/
public static String getExcelColumnLabel(int col) {
if (col > 25) {
return getExcelColumnLabel((col) / 26 - 1) + String.valueOf((char) ('A' + col % 26));
}
return String.valueOf((char) ('A' + col));
}
測試:
System.out.println(getExcelColumnLabel(0)); //輸出A
System.out.println(getExcelColumnLabel(25)); //輸出Z
System.out.println(getExcelColumnLabel(26)); //輸出AA