Java POI完成EXCEL报表导入导出(HSSF)

POI报表生成(HSSF)

java实现Excel数据导出:
HSSF是POI项目对Excel '97(-2007)文件格式的纯Java实现。XSSF是POI项目对Excel 2007 OOXML(.xlsx)文件格式的纯Java实现。
Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。官方主页API文档

功能(部分官网文档)在这里插入图片描述

主要API

在这里插入图片描述

版本控制

        <dependency>
			<groupId>com.itextpdf.tool</groupId>
			<artifactId>xmlworker</artifactId>
			<version>5.5.10</version>
		</dependency>
		<dependency>
		  <groupId>info.folone</groupId>
		  <artifactId>poi-scala_2.9.3</artifactId>
		  <version>0.9</version>
		</dependency>
		<dependency>
		  <groupId>org.apache.poi</groupId>
		  <artifactId>poi-ooxml</artifactId>
		  <version>3.9</version>
		</dependency>

生成报表

  	//创建HSSFWorkbook对象 设置工作薄
    HSSFWorkbook hswb = new HSSFWorkbook();
    //设置单元格样式
    HSSFCellStyle titleCellStyle = hswb.createCellStyle();
    //设置内容居中
    titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    titleCellStyle.setWrapText(true);// 自动换行
	titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中    
	titleCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
	titleCellStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());// 设置单元格的背景颜色
	titleCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
	titleCellStyle.setBorderTop((short) 1);// 边框的大小
	titleCellStyle.setBorderBottom((short) 1);
	titleCellStyle.setBorderLeft((short) 1);
	titleCellStyle.setBorderRight((short) 1);
    //设置字体
    HSSFFont titleFont = hswb.createFont();
    titleFont.setFontName("宋体" );
    titleFont.setFontHeightInPoints((short) 11);
    titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);	// 加粗
    titleCellStyle.setFont(titleFont);					//将字体注入
    //创建HSSFSheet对象(第一个sheet表格)
    HSSFSheet sheet = hswb.createSheet("工作表");
    //设置固定列宽
    int []cloumnWidth = {13,21,21,16,16,21,19,22,17};
    for(int c = 0;c < cloumnWidth.length ;c++){
         sheet.setColumnWidth(c, 255*cloumnWidth[c]);
    }
    /**
        sheet.autoSizeColumn((short) 0); 设置自动列宽
        会根据设定列宽的上面最后一条写入的数据设定列宽
    */
    //在sheet里创建第一行 (标题行)
    HSSFRow row=sheet.createRow(0);
    row.setRowStyle(titleCellStyle);
    row.setHeight((short) 800);// 设定行的高度//5、创建row中的单元格,从0开始
    //创建单元格并按行设置单元格内容
    row.createCell(0).setCellValue("Sub Brunch");  //A
    HSSFCell cell = row.createCell(0);//我们第一列设置宽度为0,不会显示,因此第0个单元格不需要设置样式
	cell = row.createCell(1);//从第1个单元格开始,设置每个单元格样式
	cell.setCellValue("x");//设置单元格中内容
	cell.setCellStyle(titleCellStyle);//设置单元格样式
	cell = row.createCell(2);//第二个单元格
	cell.setCellValue("y");
	cell.setCellStyle(titleCellStyle);
	cell = row.createCell(3);//第三个单元格
	cell.setCellValue("value");
	cell.setCellStyle(titleCellStyle);
	//6、输入数据(单元格)
	for(int i = 1; i <= list.size(); i++){
		cell = row.createCell(i);
		cell.setCellValue("value");
	}
	//单元格合并,有两种方式
	1、sheet.addMergedRegion(new Region(1,(short)1,1,(short)11));//参数(第一行,最后一行,第一列,最后一列)
	2、sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));//参数(第一行,最后一行,第一列,最后一列)
	//保存到本地路径
	try {
                //判断文件夹是否存在 不存在创建
                isChartPathExist(agingReport.getFilePath());
                FileOutputStream out = new FileOutputStream(agingReport.getFilePath()+agingReport.getId()+".xls");
                hswb.write(out);
                out.close();
                logger.info(
                        (new Date()).toString() + "报告已生成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
	//判断文件夹是否存在,如果不存在则新建
   	private static void isChartPathExist(String dirPath) {
        File file = new File(dirPath);
        if (!file.exists()) {
            file.mkdirs();
        }
    }

直接服务器下载

	// 输出Excel文件
	OutputStream output = response.getOutputStream();
	//设置响应头
	response.reset();
	response.setHeader("Content-disposition", "attachment;filename="
	        + new String(("下载"+fileName+ ".xls")
	        		.getBytes(), "ISO-8859-1"));
	response.setContentType("application/msexcel;charset=GBK");
	hswb.write(output);
	output.close();

读取指定路径下载

 // 输出Excel文件
            OutputStream output = response.getOutputStream();
            response.reset();
            response.reset();
            response.setHeader("Content-disposition", "attachment;filename="
                    + new String(("下载" +fileName+".xls").getBytes(), "ISO-8859-1"));
            response.setContentType("application/msexcel;charset=GBK");
            HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(excelList.get(0).getFilePath()));
            wb.write(output);
            output.close();

前端请求

请求文件路径不能使用AJAX
直接GET请求路径下载

location.href = '/pad_marketing_manage/agingReport//downExcel?list=' +id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好奇新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值