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

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

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

时间: 2024-12-11 02:25:44

Java使用jxl包写Excel文件适合列宽实现_java的相关文章

Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

以前用jxl.jar包,读写过Excel文件.也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽. 注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一. (2)对于要写入Excel中的数据统计每一列的最大列宽,最后直接将这一列的列宽设置为这个列的最大值即可. 2.实现代码 import java.io.File; import java.util.

在ASP.NET中使用EXCEL之三 写Excel文件

asp.net|excel   在按钮的click事件中输入如下代码,即可以实现写入Excel文件. 写Excel文件时,还要把项目文件夹的权限进行设置,对iuser_machine用户有可写的权限. private void Button1_Click(object sender, System.EventArgs e)  {string filename="";   Excel.ApplicationClass oExcel;   oExcel = new Excel.Applic

vc ++-VC 写excel文件的效率

问题描述 VC 写excel文件的效率 比如使用ole ,basicExcel ,或者其他方法,写1M需要使用的时间,其中,写了多少行,多少列我使用basicExcel 写了1M的数据一万行,6列,保存数据阶段花费了2.4s,计算机环境:window xp 512M,内存40G的虚拟机中执行的.在讲exe文件放到win8 系统时需要10s 使用ole 调用测试居然用了17s代码引用:http://www.cnblogs.com/yaowen/archive/2013/01/22/2870762.

二维数组-C#中如何大幅提高写excel文件的速度?

问题描述 C#中如何大幅提高写excel文件的速度? 输入文件:input.txt包含以[:]号或者[t]制表符分隔的多行(实际在100万行以上)数据,每行数据个数不定. a;b;c 1;2; 1;2;3;4;5 输出文件;output.xlsx a b c 1 2 1 2 3 4 5 问题:写了个小程序处理2000行在10s以内,百万行速度就太慢,无法忍受了.求教一些能显著提高写Excel速度的方法.网上查的先变成二维数组之类的方法,效果不大.百万行在20min以内就好. 解决方案 你完全没有

java上传doc和Excel文件怎样去验证文件内容以及如何做安全防范

问题描述 java上传doc和Excel文件怎样去验证文件内容以及如何做安全防范 我用java做了一个文件上传功能 要求只能上传doc 和 excel 文件,验证了文件名后缀以及文件头,但是这种防范都可以绕过 !- 有么有更好的验证方法 求大神们指教 !- 小弟在此拜谢 解决方案 把doc,excel等用文本打开,然后检查一些文件头等信息. 解决方案二: 除非你用poi这样的库全部解析下.

急:jxl读取指定excel文件,并为某列赋值。同时对一个sheet进行读写操作

问题描述 如何对已有的excel文件,同时进行读写操作.有一个excel的文件,要读取该workbook中指定sheet中的信息,并修改该sheet中某些单元格的值.我写的代码,总是报这个错误java.lang.ClassCastException:jxl.write.Blankatdsic.TPB.main(TPB.java:271)Stringrealpath="d:/test.xls";try{Workbookwb=Workbook.getWorkbook(newFile(rea

Java使用Apache POI操作excel文件

官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format. 从官方文档中了解到:POI提供的HSSF包用于操作 Excel '97(-2007)的.xls文件,而XSSF包则用于操作

JAVA技术实现上传下载文件到FTP服务器(完整)_java

具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

探讨如何使用Java语言实现word或excel文件的打印功能

问题描述 Java语言自身有关于打印的API,但不得不承认这种打印功能并不是很强,如果要实现下面需求:a.用户在界面上点击批量打印按钮:b.后台自动根据所传的路径去服务器上找到.doc文档(路径是个文件夹,里面包含很多word文档):c.客户端装了打印机并打印服务器上的word文档:如何实现呢?请大家各抒己见,谢谢 解决方案 解决方案二:这个...我想说的是你本地装了JAVA的client吗?要不然这个打印跟JAVA的关系不大批量打印首先也得从服务器获得文档,获得之后怎么打印就可以用程序来控制了