一、jxl 和POI 对比
- 基本介绍两者之间区别
Excel开发常用开源工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。
1.1 Jxl优缺点
Jxl特征有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字、日期操作
● 能够修饰单元格属性
● 支持图像和图表
● 支持部分公式
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
1.2 Poi优缺点
Jakarta 的 POI Project 与 Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。如果你的软件是跟财务有相当的关系的话,建议采用 POI Project,就我所在目前的项目来说由于用不到计算公式,而且很可能需要导出图片。
在这个地方进行了大片的引用主要是怕原作者网站打不开
原作者网站:https://www.cr173.com/html/10377_1.html
二、jxl 基本操作
- 介绍三个对象
WritableWorkbook 工作簿
WritableSheet 工作表
WritableCellFormat 单元格 - 基本操作创建增删改网上一大堆(不重复赘述)推荐基础操作链接
单元格操作https://blog.csdn.net/iteye_8224/article/details/82475132/
读写改操作地址
最全面的操作https://www.cr173.com/html/10377_1.html
3.1、添加公式(new Formula)
参数介绍 0是列 ,28 是行 ,双引号里面放公式, twcfLeft这个参数可带可不带(单元格样式)
writableSheet.addCell(new Formula(0,28,"公式",twcfLeft));
3.2、 创建不同单元格(好处,比如创建数据单元格 对公式支持更友好)
3.2.1、文本单元格
new Lable(列号,行号,文本,【可有可不有 单元格样式】)
3.2.2、数字单元格(还有一个好处就是如果数据是0.0则展示0)
new Number(列号,行号,数据,【可有可不有 单元格样式】)
3.2.3、布尔单元格
new Boolean(列号,行号,数据,【可有可不有 单元格样式】)
3.3、字体设置
// 构造标题格式:黑体、12号、非粗体、非斜体、无下划线、黑色
WritableFont titleFont = new WritableFont(jxl.write.WritableFont.createFont("黑体"), 12,
WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
WritableCellFormat twcf = new WritableCellFormat(titleFont);
twcf.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); 设置单元格所有边框都是细边框
twcf.setAlignment(jxl.format.Alignment.CENTRE);// 把水平对齐方式指定为居中
twcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 把垂直对齐方式指定为居中
twcf.setWrap(true);// 通过调整宽度和高度自动换行
三、使用过程疑问和解决
问题一:插入公式无法识别“&” 符号
我查询了很多文档解决方案就是:你需要换其他公式实现当前公式功能
问题二:给一个大表最外围加边框
这个非常麻烦,你需要创建不同的单元格样式引用,才能实现
比如设置单元格顶部是加粗边框,其他边框都是细边框
(注意导入jar包 用jxl.format 而不是jxl.write)
ritableCellFormat twcfTop = new WritableCellFormat();//单元格
twcfTop.setBorder(jxl.format.Border.TOP, jxl.format.BorderLineStyle.THICK);//设置边框
twcfTop.setBorder(jxl.format.Border.LEFT, jxl.format.BorderLineStyle.THIN);//设置边框
twcfTop.setBorder(jxl.format.Border.RIGHT, jxl.format.BorderLineStyle.THIN);//设置边框
twcfTop.setBorder(jxl.format.Border.BOTTOM, jxl.format.BorderLineStyle.THIN);//设置边框
问题三:设置excel 打印格式 (可以导入jxl 包之后,查看 SheetSettings这个对象)
设置横向打印A4纸形式
writableSheet.setPageSetup(PageOrientation.LANDSCAPE, PaperSize.A4,0.1d,0.1d);
//设置打印横向
writableSheet.getSettings().setOrientation(PageOrientation.LANDSCAPE);
//设置打印缩比例
writableSheet.getSettings().setScaleFactor(44);
//设置excel 横向打印
writableSheet.getSettings().setOrientation(PageOrientation.PORTRAIT);
//设置excel 打印时候水平居中
writableSheet.getSettings().setHorizontalCentre(true);
//设置excel 打印时候垂直居中
writableSheet.getSettings().setVerticalCentre(true);
//设置excel 打印时页边距(单位是英寸)
writableSheet.getSettings().setTopMargin(0.2);
writableSheet.getSettings().setLeftMargin(0.2);
writableSheet.getSettings().setRightMargin(0);
writableSheet.getSettings().setBottomMargin(0);