文章目录
前言
JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95~2000的版本。现在已经停止更新和维护。但是有些老公司还在用,所有记录下来!
1. 使用JXL导出
通过WritableWorkbook, WritableSheet, Label这三个对象我们就可以实现Excel文件的导出工作.
2. 实现步骤
2.1 相关Jar包
<!--操作jxl-->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
2.2 创建创建可写入的Excel工作薄
WritableWorkbook workbook = Workbook.createWorkbook(输出流);
2.3 创建工作表
WritableSheet sheet = workbook.createSheet(工作表名称, 工作表的索引值);
2.4 创建单元格
Label labelC = new Label(列索引值, 行索引值, "单元格中的内容");
sheet.addCell(labelC);
2.5 写入到文件
workbook.write(); //写入数据
2.6 释放资源:
workbook.close(); //关闭文件
3. 代码实现导出用户列表数据
3.1 UserController中添加方法
@GetMapping(value = "/downLoadXlsByJxl",name = "使用jxl下载")
public void downLoadXlsByJxl(HttpServletResponse response){
userService.downLoadByJxl(response);
}
3.2 UserService中的方法
//jxl导出
public void downLoadXlsByJxl(HttpServletResponse response) throws Exception {
//1.获取输出流
ServletOutputStream out = response.getOutputStream();
//2.创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(out);
//3.创建工作表
WritableSheet sheet = workbook.createSheet("Hello JXL~~", 0);
//调整列宽 第一个参数: 列的索引值 第二个参数: 1代表一个标准字符的宽度
sheet.setColumnView(0,5);
sheet.setColumnView(1,8);
sheet.setColumnView(2,15);
sheet.setColumnView(3,10);
sheet.setColumnView(4,30);
//4.创建标题
String[] strings ={"编号","姓名","手机号","入职日期","现住址"};
Label label=null;
for (int i = 0; i < strings.length; i++) {
label = new Label(i, 0, strings[i]);
sheet.addCell(label);
}
//5.查询所有用户
List<User> users = userMapper.selectAll();
int rowIndex=1;
for (User user : users) {
label=new Label(0,rowIndex,user.getId().toString());
sheet.addCell(label);
label=new Label(1,rowIndex,user.getUserName().toString());
sheet.addCell(label);
label=new Label(2,rowIndex,user.getPhone().toString());
sheet.addCell(label);
label=new Label(3,rowIndex, new SimpleDateFormat("yyyy-MM-dd").format(user.getHireDate()));
sheet.addCell(label);
label=new Label(4,rowIndex,user.getAddress().toString());
sheet.addCell(label);
rowIndex++;
}
//6. 文件导出 一个流 两个头(文件的打开方式 in-line attachment, 文件的下载时mime类型) 表格字符编码 application/vnd.ms-excel
String filename="一个JXL入门.xls";
response.setHeader("content-disposition","attachment;filename="+new String(filename.getBytes(),"ISO8859-1"));
response.setContentType("application/vnd.ms-excel");
//7.输出
workbook.write();
//8.关闭流
workbook.close();
out.close();
}