zoukankan      html  css  js  c++  java
  • Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

    以前用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文件 解析

                                               Java数据导入(读)Excel文件 解析

  • 相关阅读:
    开发一个struts2的实例
    5个让DBA爱上你的SQL技巧
    实现struts2框架
    8张图带你理解Java整个只是网络(转载)
    jQuery实例属性和方法
    jQuery扩展工具方法
    javaEE的十三个技术规范
    Spring学习笔记5---cope(作用越)理解
    Spring学习笔记4----Spring IOC例子
    Spring学习笔记3---Spring简介
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/3297653.html
Copyright © 2011-2022 走看看