Excel简介
目前市面上的Excel分为两个大版本2003、2007两个版本,区别如下:
2003 | 2007 | |
---|---|---|
后缀 | xls | xlsx |
结构 | 二进制格式 | xml类型结构 |
单sheet数量 | 行:65535;列:256 | 行1048576;列:16384 |
特点 | 存储容量有限 | 基于xml压缩,占用空间小 |
常用Excel操作工具
常见用于操作Excel的方式有2种:JXL和POI
JXL
JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本,局限性较大。现在已经停止更新和维护。(不推荐工作中使用)
POI
POI是apache的项目,可对微软的Word,Excel,PPT进行操作,包括office2003和2007,Excle2003和2007。
poi现在一直有更新。所以现在主流使用POI。
Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache
POI提供API给Java语言操作Microsoft Office的功能。
API对象介绍
工作簿 : WorkBoo (HSSFWordBook : 2003版本,XSSFWorkBook : 2007级以上)
工作表 : Sheet (HSSFSheet : 2003版本,XSSFSheet : 2007级以上)
行 : Row (HSSFRow : 2003版本,XSSFRow : 2007级以上)
单元格 : Cell (HSSFCell : 2003版本,XSSFCell : 2007级以上)
使用JXL导出excel
依赖:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
controller:
@GetMapping("downLoadXlsByJxl")
public void downLoadXlsByJxl(HttpServletResponse response, HttpServletRequest request){
userService.downLoadXlsByJxl(response, request);
}
service:
public void downLoadXlsByJxl(HttpServletResponse response, HttpServletRequest request) {
try (ServletOutputStream outputStream = response.getOutputStream()){
WritableWorkbook workbook= Workbook.createWorkbook(outputStream);
WritableSheet sheet = workbook.createSheet("第一个", 0);
//Excel表头内容
String[] title = new String[]{"编号", "姓名", "手机号", "入职日期", "现住址"};
Label label;
for (int i = 0; i < title.length; i++) {
label = new Label(i, 0, title[i]);
sheet.addCell(label);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<User> users = userMapper.selectAll();
for (int i = 1; i <= users.size(); i++) {
User user = users.get(i - 1);
label = new Label(0,i, String.valueOf(user.getId()));
sheet.addCell(label);
label = new Label(1,i, user.getUserName());
sheet.addCell(label);
label = new Label(2,i, user.getPhone());
sheet.addCell(label);
label = new Label(3,i, sdf.format(user.getHireDate()));
sheet.addCell(label);
label = new Label(4,i, user.getAddress());
sheet.addCell(label);
}
String filename = "员工入职信息.xls";
String str = new String(filename.getBytes(), "ISO8859-1");
response.setHeader("content-disposition","attachment;filename="+str);
response.setContentType("application/vnd.ms-excel");
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
访问:http://localhost:8080/downLoadXlsByJxl
下载成功:
设置列宽
//设置每一列的宽度
sheet.setColumnView(0,5);
sheet.setColumnView(1,5);
sheet.setColumnView(2,15);
sheet.setColumnView(3,10);
sheet.setColumnView(4,25);