poi一个很小的案例实现导出Excel、使用模板导出Excel、用模板批量导入数据(基于struts实现), 谷歌浏览器默认文件输出路径导致无法指定文件输出路径

在这里插入图片描述
基于struts实现源码地址:https://gitee.com/never_enough/javaPoiDemo

下面不是基于struts实现的:

1、首先页面发起请求:

window.open("${ctx}/qianbao/exportSelected?processId=${processId}&instanceState=${instanceState}&instanceIds="+instanceIds, "_blank");

2、控制层:
与之前struts里面的ServletActionContext不同,这里咱们使用正常的HttpServletResponse就行:
在这里插入图片描述
3、导出Excel 工具类

import cn.udrm.wsdw.process.model.ProcessInfo;
import cn.udrm.wsdw.process.util.DateUtil;
import jxl.write.WritableCellFormat;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;
import java.io.InputStream;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @description  导出Excel 工具类
 * @author    
 * @date  2020/8/4 10:28
 */
public class ExcelUtil {
    //一行一行  一列一列的放入数据
	public static void fillExcelData(List<ProcessInfo> processInfoList, Workbook wb, String[] headers)throws Exception{

	    int rowIndex=0;
		Sheet sheet=wb.createSheet();
		Row row=sheet.createRow(rowIndex++);
        //把第一行标题 塞进去
		for(int i=0;i<headers.length;i++){
			Cell cell = row.createCell(i);
            CellStyle cellStyle = wb.createCellStyle();  //设置样式
            cellStyle.setAlignment(HorizontalAlignment.forInt(2)); //设置水平方向的对其方式
            cellStyle.setVerticalAlignment(VerticalAlignment.forInt(1)); //设置垂直方法的对齐方式
            cell.setCellValue(headers[i]);
            cell.setCellStyle(cellStyle);
		}

        /*  从数据库中读取数据  然后存到文件里面 */
		/*
		while(rs.next()){  //遍历行
			row=sheet.createRow(rowIndex++); //继续创建行
			for(int i=0;i<headers.length;i++){
				row.createCell(i).setCellValue(rs.getObject(i+1).toString());
			}
		}
		*/

        /* 数据源一般为一个list,遍历list,得到对象  然后存到文件里面 */

		int size = processInfoList.size();
		ProcessInfo processInfo = null;

        CellStyle cellStyle = wb.createCellStyle();  //设置样式
        cellStyle.setAlignment(HorizontalAlignment.forInt(2)); //设置水平方向的对其方式
        cellStyle.setVerticalAlignment(VerticalAlignment.forInt(1)); //设置垂直方法的对齐方式

		for(int i = 0; i < size; i ++) {
			row=sheet.createRow(rowIndex++); //继续创建行
            processInfo = processInfoList.get(i);

            row.setRowStyle(cellStyle);

			row.createCell((short) 0).setCellValue(i+1);     //序号
            row.getCell(0).setCellStyle(cellStyle);

			row.createCell((short) 1).setCellValue("");      //状态   todo
            row.createCell((short) 2).setCellValue(processInfo.getSerialNumber()); //流水号
            row.createCell((short) 3).setCellValue(processInfo.getWenhao());   //签报号
            row.createCell((short) 4).setCellValue(processInfo.getTitle()); //标题
            row.getCell(4).setCellStyle(cellStyle);

            Date date = processInfo.getCreated();
            String dateStr = DateUtil.formatDate(date, "yyyy-MM-dd HH:mm:ss");  //yyyy-MM-dd hh:mm:ss  12小时制
            row.createCell((short) 5).setCellValue(dateStr); //起草时间
            row.createCell((short) 6).setCellValue(processInfo.getCbdeptname()); //呈报单位
            row.createCell((short) 7).setCellValue(processInfo.getYpld()); //阅批领导 (呈送领导)
            row.createCell((short) 8).setCellValue(processInfo.getStatus()); //当前流程
        }
	}
}

4、导出Excel 响应工具类

import org.apache.poi.ss.usermodel.Workbook;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.io.PrintWriter;
/**
 * @description  导出Excel 响应工具类
 * @date  2020/8/4 10:27
 */
public class ResponseUtil {
	public static void write(HttpServletResponse response, Object o)throws Exception{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		out.print(o.toString());
		out.flush();
		out.close();
	}
	
	public static void export(HttpServletResponse response, Workbook wb, String fileName)throws Exception{
		response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));
		response.setContentType("application/ynd.ms-excel;charset=UTF-8");
		OutputStream out=response.getOutputStream();
		wb.write(out);
		out.flush();
		out.close();
	}
}

5、还有需要注意的一点:谷歌浏览器会有默认文件存储路径,所以导致无法指定文件输出路径,试一下其他浏览器是可以选择文件导出路径的。

6、参考 POI-设置单元格的对齐方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值