欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用jxl包寫Excel文件適合列寬實(shí)現(xiàn)

 更新時(shí)間:2013年11月20日 16:54:03   作者:  
用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實(shí)現(xiàn)最適合列寬。

注意,這個(gè)只是基本可以實(shí)現(xiàn),基本針對中文電子報(bào)表。

1.實(shí)現(xiàn)思路
(1)一般的中文漢字占位長度是英文字母的2倍,“方塊字”很統(tǒng)一。
(2)對于要寫入Excel中的數(shù)據(jù)統(tǒng)計(jì)每一列的最大列寬,最后直接將這一列的列寬設(shè)置為這個(gè)列的最大值即可。

2.實(shí)現(xiàn)代碼

復(fù)制代碼 代碼如下:

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{
        //構(gòu)造數(shù)據(jù),有兩行
         List<String> row1=new ArrayList<String>();    row1.add("最合適列寬");    row1.add("這個(gè)基本可以實(shí)現(xiàn)");
        List<String> row2=new ArrayList<String>();    row2.add("Best Column Width");    row2.add("Haha");
        List list=new ArrayList();    list.add(row1);    list.add(row2);

        //寫數(shù)據(jù)到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()];    //保存最佳列寬數(shù)據(jù)的數(shù)組

        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個(gè)單位長度
                 if(columnBestWidth[j]<width)    ///求取到目前為止的最佳列寬
                     columnBestWidth[j]=width;
            }
        }

        for(int i=0;i<columnBestWidth.length;i++){    ///設(shè)置每列寬
            sheet.setColumnView(i, columnBestWidth[i]);
        }
    }

    public static int getChineseNum(String context){    ///統(tǒng)計(jì)context中是漢字的個(gè)數(shù)
        int lenOfChinese=0;
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");    //漢字的Unicode編碼范圍
        Matcher m = p.matcher(context);
        while(m.find()){
            lenOfChinese++;
        }
        return lenOfChinese;
    }
}

3.只是實(shí)現(xiàn)而已
(1)這個(gè)是一次項(xiàng)目中寫的,自動導(dǎo)數(shù)Excel電子報(bào)表,可以很好實(shí)現(xiàn)。主要是:漢字,阿拉伯?dāng)?shù)字。
(2)漢字是方塊字,每個(gè)字的大小很統(tǒng)一,可以很驚奇的統(tǒng)計(jì)列寬。
(3)英文小寫字母共26個(gè),每個(gè)字母的大小差異很小,也可以實(shí)現(xiàn)最佳列寬。
(4)其他字符,每個(gè)字符的占位大小差異不定,比如大小字母序列“IIIIIII”和字母“DDDDDDD”。

總之,jxl.jar沒有自動實(shí)現(xiàn)最適合列寬的方法;如果要導(dǎo)出的電子報(bào)表中漢字占絕大多數(shù),就能很好的用這個(gè)程序?qū)崿F(xiàn)最適合列寬。

相關(guān)文章

最新評論