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

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

  1. java使用POI jar包读写xls文件

    主要使用poi jar来操作excel文件.代码中用到的数据库表信息见ORACLE之表.使用public ArrayList<Person> getPersonAllRecords()获得 ...

  2. Java使用comms-net jar包完成ftp文件上传进度的检测功能

    本文章只讲述大致的思路与本次功能对应的一些开发环境,具体实现请结合自己的开发情况,仅供参考,如果有不对的地方,欢迎大家指出! 准备环境:JDK1.7 OR 1.8.eclipse.ftp服务器(可自行 ...

  3. Excel文件按照指定模板导入数据(用jxl.jar包)

        本文中的方法只适合Excel2003,要读取Excel2007最好使用poi.jar,据说poi.jar还在更新,jxl.jar已经不更新了,处理Excel文件的读写问题最好还是学习poi.j ...

  4. JAVA读、写EXCEL文件

    採用jxl.jar包,网上下载,百度一下到出都是.希望能够帮助到大家. 接下来直接贴代码: <span style="font-size:18px;"> public ...

  5. Java 操作jar包工具类以及如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  6. java读取jar包中的文件

    随手写了一个java小工具,maven打包成功后,发现工具总是读不到打在jar包中的文件信息,要读取的文件位于 /src/main/resources 目录下,打包成功后,文件就在jar包中根目录下, ...

  7. Java如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  8. excel导出 jxl.jar包

    导入jxl.jar包, 代码如下: package com.gree; import java.io.IOException; import java.io.OutputStream; import ...

  9. Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件

    ImageView设置图片 JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置 ImageView设置图片 首先,我们让fxml对应的那个controller的java ...

随机推荐

  1. 2017-2018-1 20179202《Linux内核原理与分析》第九周作业

    进程的切换和系统的一般执行过程 1.知识总结 (1)进程调度的时机: 中断处理过程直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(). 内核线程是一 ...

  2. 解决命令行运行python文件,出现No module named *** 报错问题

    有时候在一个项目中运行的时候,可能是之前已经mark成sources root 你自己忘记了, 于是就在命令行也执行python文件,然后就出现 No module named *** 等 相关你认为 ...

  3. 2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡

    链接:https://www.nowcoder.com/acm/contest/74/B来源:牛客网 题目描述 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求 ...

  4. POJ - 1329 Circle Through Three Points 求圆

    Circle Through Three Points Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4112   Acce ...

  5. 使用Mongo索引需要注意的几个点

    1.正则表达式和取反运算符不适合建立索引 正则表达式:$regex 取反运算符:$ne ,$nin 2.backgroud建立索引速度缓慢 前台创建是会有阻塞,backgroud效率缓慢,实际情况实际 ...

  6. java-Excel导出中的坑

    在Excel导出过程中,若遇到合并单元格样式只有第一行合并,而下面要合并的行没有边框显示. 一般问题出在将单元格样式设置与合并单元格放在同一个循环中导致. 以下为一个完整版的demo以供参考 定义边框 ...

  7. NetCore控制台实现自定义CommandLine功能

    命令行科普: 例如输入: trans 123 456 789 -r 123 -r 789上面例子中:trans是Command,123 456 789是CommandArgument,-r之后的都是C ...

  8. [python 源码]字符串对象的实现

    还是带着问题上路吧,和整数对象的实现同样的问题: >>> a='abc' >>> b='abc' >>> a is b True >> ...

  9. [BalticOI2002]Bicriterial routing

    OJ题号: BZOJ1375.ECNU1468 题目大意: 给定一个无向连通图,每条边有两个权值w1和w2.定义一条路径是优秀的当且仅当没有别的路径满足两个权值的和都比该路径小,求s到t的优秀路径条数 ...

  10. hdu 4462 第37届ACM/ICPC 杭州赛区 J题

    题意:有一块n*n的田,田上有一些点可以放置稻草人,再给出一些稻草人,每个稻草人有其覆盖的距离ri,距离为曼哈顿距离,求要覆盖到所有的格子最少需要放置几个稻草人 由于稻草人数量很少,所以状态压缩枚举, ...