注意,这个只是基本可以实现,基本针对中文电子报表。
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
List
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) throws Exception{
int columnBestWidth[]=new int[list.get(0).size()]; //保存最佳列宽数据的数组
for(int i=0;i
for(int j=0;j
int width=row.get(j).length()+getChineseNum(row.get(j)); ///汉字占2个单位长度
if(columnBestWidth[j]
}
}
for(int i=0;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没有自动实现最适合列宽的方法;如果要导出的电子报表中汉字占绝大多数,就能很好的用这个程序实现最适合列宽。



