java通过poi导出数据库数据到Excel,手动获取对象属性。并且在浏览器弹出下载框下载Excel
Jakarta POI 是一套用于访问微软格式文档的Java API。
首先需要导jar包
maven项目pom.xml添加依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14-beta1</version>
</dependency>
在Web层编辑导出Excel代码
这样为了方便使用SpringMVC
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
@RequestMapping(value = "/getExcel")
@ResponseBody
public String getExcel(HttpServletResponse response) throws IOException{
//查询全部User信息
List<User> userList =userService.findAllUser();
//创建HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象
HSSFSheet sheet = wb.createSheet("成绩表");
//创建HSSFRow对象
HSSFRow row = sheet.createRow(0);
//创建HSSFCell对象
HSSFCell cell=row.createCell(0);
//设置单元格的值
cell.setCellValue("用户信息表");
sheet.addMergedRegion(new CellRangeAddress(0,0,0,2));
//遍历userList
int i=1;
for (User user:userList){
//在sheet里创建第i行
HSSFRow irow=sheet.createRow(i);
//创建单元格并设置单元格内容
irow.createCell(0).setCellValue(user.getUserId());
irow.createCell(1).setCellValue(user.getUsername());
irow.createCell(2).setCellValue(user.getPassword());
i++;
}
//输出Excel文件
OutputStream output=response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=details.xls");
response.setContentType("application/msexcel");
//FileOutputStream output=new FileOutputStream("d:\\workbook.xls");
wb.write(output);
output.close();
return null;
}
单元格样式
public static void setCellStyle(XWPFTableCell cell,String text,String fontFamily){
cell.removeParagraph(0);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraphX = cell.addParagraph();
paragraphX.setFontAlignment(2);
XWPFRun run = paragraphX.createRun();
run.setFontFamily(fontFamily);
run.setText(text);
}
//取第1个列表
XWPFTable table = tables.get(0);
//获取表格行对象
XWPFTableRow row = null;
row = table.createRow();
XWPFTableCell cell0 = row.getCell(0);
Word2007Util.setCellStyle(cell0,StringUtil.parseString(i + 1),"仿宋"); //序号
XWPFTableCell cell1 = row.getCell(1);
Word2007Util.setCellStyle(cell1, "草稿”,"仿宋");
XWPFTableCell cell2 = row.getCell(2);
HSSFCellStyle.ALIGN_CENTER
HSSFCell cell = row.createCell(0);
// 设置单元格的值
cell.setCellValue("项目");
cell.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
表头设置:
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(“导出数据”);
style.setAlignment(HorizontalAlignment.CENTER); //水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
style.setWrapText(true);//自动换行
单元格中:
HSSFRow row1 = sheet.createRow(i);//这里一般是遍历集合
row1.createCell(0).getCellStyle().setWrapText(true);//自动换行
row1.createCell(0).getCellStyle().setAlignment(HorizontalAlignment.CENTER);//水平居中
row1.createCell(0).getCellStyle().setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
设置宽高
sheet.setDefaultColumnWidth(25);//列宽
sheet.setColumnWidth(1, 50256);//设置第一个列的宽 需要256 这里不做过多的解释
HSSFRow row = sheet.createRow(0);
row.setHeightInPoints(50);//行高
HSSFCellStyle style = workbook.createCellStyle();
row.setHeight(50);//高度
style.setFillForegroundColor((short)43);
style.setFillForegroundColor(HSSFColor.AQUA.index);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
设置表头不动
HSSFSheet sheet = workbook.createSheet(“导出数据”);
sheet.createFreezePane(15, 1);//固定第一行十五个列
//sheet.protectSheet(“123456”); //设置编辑密码
mapField.get(field).getBytes().length 内容文字长度
设置第i+1列单元格大小
sheet.setColumnWidth(i, (int) (mapField.get(field).getBytes().length * 1.2d * 256 > 12 * 256
? mapField.get(field).getBytes().length * 1.2d * 256 : 12 * 256));
本文借鉴
https://blog.csdn.net/jerehedu/article/details/45195359 作者:杰瑞教育
链接中还提供了很多Excel知识