以前用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實現最適合列寬。
注意,這個只是基本可以實現,基本針對中文電子報表。
1.實現思路
(1)一般的中文漢字占位長度是英文字母的2倍,“方塊字”很統一。
(2)對於要寫入Excel中的數據統計每一列的最大列寬,最后直接將這一列的列寬設置為這個列的最大值即可。
2.實現代碼
import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; //中文名 public class ExcelBestColumn { public static void main(String argus[]) throws Exception{ //構造數據,有兩行 List<String> row1=new ArrayList<String>(); row1.add("最合適列寬"); row1.add("這個基本可以實現"); List<String> row2=new ArrayList<String>(); row2.add("Best Column Width"); row2.add("Haha"); List list=new ArrayList(); list.add(row1); list.add(row2); //寫數據到Excel中 WritableWorkbook book= Workbook.createWorkbook(new File("t.xls")); WritableSheet sheet=book.createSheet("測試",0); writeDataToSheet(sheet,list); book.write(); book.close(); } public static void writeDataToSheet(WritableSheet sheet,List<List<String>> list) throws Exception{ int columnBestWidth[]=new int[list.get(0).size()]; //保存最佳列寬數據的數組 for(int i=0;i<list.size();i++){ List<String> row=list.get(i); for(int j=0;j<row.size();j++){ sheet.addCell(new Label(j,i,row.get(j))); int width=row.get(j).length()+getChineseNum(row.get(j)); ///漢字占2個單位長度 if(columnBestWidth[j]<width) ///求取到目前為止的最佳列寬 columnBestWidth[j]=width; } } for(int i=0;i<columnBestWidth.length;i++){ ///設置每列寬 sheet.setColumnView(i, columnBestWidth[i]); } } public static int getChineseNum(String context){ ///統計context中是漢字的個數 int lenOfChinese=0; Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); //漢字的Unicode編碼范圍 Matcher m = p.matcher(context); while(m.find()){ lenOfChinese++; } return lenOfChinese; } }
3.只是實現而已
(1)這個是一次項目中寫的,自動導數Excel電子報表,可以很好實現。主要是:漢字,阿拉伯數字。
(2)漢字是方塊字,每個字的大小很統一,可以很驚奇的統計列寬。
(3)英文小寫字母共26個,每個字母的大小差異很小,也可以實現最佳列寬。
(4)其他字符,每個字符的占位大小差異不定,比如大小字母序列“IIIIIII”和字母“DDDDDDD”。
總之,jxl.jar沒有自動實現最適合列寬的方法;如果要導出的電子報表中漢字占絕大多數,就能很好的用這個程序實現最適合列寬。
jxl.jar對Excel的基本操作見:Java數據導出(寫)Excel文件 解析