源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-11-20 00:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java使用jxl包写Excel文件适合列宽实现
注意,这个只是基本可以实现,基本针对中文电子报表。 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,“方块字”很统一。 (2)对于要写入Excel中的数据统计每一列的最大列宽,最后直接将这一列的列宽设置为这个列的最大值即可。 2.实现代码
[u]复制代码[/u] 代码如下:
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没有自动实现最适合列宽的方法;如果要导出的电子报表中汉字占绝大多数,就能很好的用这个程序实现最适合列宽。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部