java通过poi导出Excel(手动获取对象属性)

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知识

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值