Java使用jxl包写Excel文件适合列宽实现

所属分类: 软件编程 / java 阅读数: 58
收藏 0 赞 0 分享

注意,这个只是基本可以实现,基本针对中文电子报表。

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没有自动实现最适合列宽的方法;如果要导出的电子报表中汉字占绝大多数,就能很好的用这个程序实现最适合列宽。

更多精彩内容其他人还在看

Javaweb 鼠标移入移出表格颜色变化的实现

这篇文章主要介绍了Javaweb 鼠标移入移出表格颜色变化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Java 实现图片压缩的两种方法

这篇文章主要介绍了Java 实现图片压缩的两种方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

据说这个是可以撸到2089年的idea2020.2(推荐)

这篇文章主要介绍了据说这个是可以撸到2089年的idea2020.2,本教程给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

这篇文章主要介绍了一篇文章带你搞定SpringBoot不重启项目实现修改静态资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

win10操作系统下重启电脑java环境变量失效

这篇文章主要介绍了win10操作系统下重启电脑java环境变量失效,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Java实现批量修改文件名和重命名的方法

这篇文章主要介绍了Java实现批量修改文件名和重命名的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

关于Java HashMap自动排序的简单剖析

这篇文章主要给大家介绍了关于Java HashMap自动排序的简单剖析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring中BeanFactory和ApplicationContext的作用和区别(推荐)

这篇文章主要介绍了Spring中BeanFactory和ApplicationContext的作用和区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java程序执行Cmd指令所遇问题记录及解决方案

这篇文章主要介绍了Java程序执行Cmd指令所遇问题记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

深入浅析jni中的java接口使用

这篇文章主要介绍了jni中的java接口使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多