java操作Excel之jxl
程序员文章站
2024-02-24 13:31:58
...
前言:
很多时候我们的程序都有操作Excel的需求,如自动报表,将查询结果写入Excel等等需求。其实java操作Excel有三个第三方库可以用,Apache的POI,jxls,以及本文的jxl。
jxls其实是封装了POI,但是他和POI,jxl不同的是它提出了一个非常有趣的概念,基于模板操作Excel数据的写入,节省了大量的java代码来操作绘制Excel样式。
jxl和POI相比,POI的功能更多一点,同时支持Excel2007的格式。如果数据量超过65560那就使用POI因为2007版支持一百万行+的数据量。
那么jxl的优点呢,个认为轻量jar包只有几百kb,同时功能强大基本可以满足各种需求,同时它完全用代码控制excel对表格把控更强同时性能也比POI更好一点。什么场景使用比较合适,数据量不是很大而且样式比较复杂Excel需求。缺点就是代码量大,尤其是模板代码。
闲话不多说开始上代码说明:
package com.kk.jxl;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class jxlTest {
public static void main(String[] args) throws IOException, RowsExceededException, WriteException{
//创建一个Excel文件
WritableWorkbook book = Workbook.createWorkbook(new File("D://img//测试表1.xls"));
/*
*创建excel中的页面,设置页面名称,页面号有零开始,页面会按页面号从小到大的顺序
* 在excel中从左向右排
*/
WritableSheet sheet1 = book.createSheet("第一个工作簿", 0);
WritableSheet sheet2 = book.createSheet("第二个工作簿", 1);
//设置单元格的样式
WritableCellFormat cellFormat = new WritableCellFormat();
//设置水平居中
cellFormat.setAlignment(jxl.format.Alignment.CENTRE);
//设置自动换行
cellFormat.setWrap(true);
//设置显示的字体样式,字体,字号,是否粗体,字体颜色
cellFormat.setFont(new WritableFont(WritableFont.createFont("楷体 _GB2312"),12,WritableFont.NO_BOLD,false,
UnderlineStyle.NO_UNDERLINE,Colour.RED)
);
//设置单元格背景色
cellFormat.setBackground(jxl.format.Colour.BROWN);
//设置单元格内容居中
cellFormat.setAlignment(Alignment.CENTRE);
//设置边框
cellFormat.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN
,jxl.format.Colour.BLACK);
//想要全部加上边框线 用循环控制
for (int j = 0; j < 25; j++) {
for (int i = 0; i < 25; i++) {
sheet1.addCell(new Label(i,j,"",cellFormat));
}
}
//创建一个单元格,并按行列坐标进行指定的内容写入 (注:0,0,"Excel"零代表坐标位置)
Label label1 = new Label(0,0,"Excel",cellFormat);
sheet1.addCell(new Label(0,1,"初始登记",cellFormat));
sheet1.addCell(new Label(1,1,"dcp输出【看",cellFormat));
sheet1.addCell(new Label(2,2,"dcp输出【看",cellFormat));
Label ladel2 = new Label(0,0,"test3614");
//将行列的值写入里面
sheet1.addCell(label1);
//插入图片
File file = new File("D:\\img\\未标志3.png");
/*
* 设置图片位置,前两个参数为插入图片的单元格坐标,后面设置从插入的单元格开始横向和纵向
* 分别要占用的单元格个数。最后传入图片文件
*/
jxl.write.WritableImage image=new jxl.write.WritableImage(6, 0, 3, 3, file);
//将图片插入页面
sheet1.addImage(image);
//创建数字类型的行列值
Number number1 = new Number(4,0,789.123);
Number number2 = new Number(4,0,789.12345678910);
//将数字类型的行列值插入指定的页面 (addCell:添加单元格内容)
sheet1.addCell(number1);
sheet2.addCell(number2);
//创建日期类型数据,并添加
DateTime dateTime = new DateTime(5,0 ,new Date() );
sheet1.addCell(dateTime);
//开始执行写入操作
book.write();
//关闭流
book.close();
}
}
上一篇: 用Power BI制作时序地理报表
下一篇: JXL操作Excel