Java使用jxl.jar包寫Excel文件的最適合列寬問題基本實現

之前用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,可是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,能夠基本實現最適合列寬html

注意,這個只是基本能夠實現,基本針對中文電子報表。java

1.實現思路數組

  (1)通常的中文漢字佔位長度是英文字母的2倍,「方塊字」很統一。post

  (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.只是實現而已url

(1)這個是一次項目中寫的,自動導數Excel電子報表,能夠很好實現。主要是:漢字,阿拉伯數字。spa

(2)漢字是方塊字,每一個字的大小很統一,能夠很驚奇的統計列寬。code

(3)英文小寫字母共26個,每一個字母的大小差別很小,也能夠實現最佳列寬。htm

(4)其餘字符,每一個字符的佔位大小差別不定,好比大小字母序列「IIIIIII」和字母「DDDDDDD」。

  總之,jxl.jar沒有自動實現最適合列寬的方法;若是要導出的電子報表中漢字佔絕大多數,就能很好的用這個程序實現最適合列寬。

 

jxl.jar對Excel的基本操做見:Java數據導出(寫)Excel文件 解析

                                           Java數據導入(讀)Excel文件 解析

相關文章
相關標籤/搜索