Java 按模板导出excel

/**
     * 按模板导出excel
     * @param response
     * @param templatePath  要导出的模板路径
     * @param sourceList  	数据集合
     * @param targetClass  	目标class类
     * @param insertRow 	插入的起始行数
     * @throws Exception
     */
    public static void exportByTempBySelfCon(
	    HttpServletResponse response, 
	    String templatePath, 
	    Collection<?> sourceList, 
	    Class<?> targetClass, 
	    int insertRow, 
	    List<CellContent> cellConList)  throws Exception {
	    
        Workbook workbook =null;
        OutputStream os = null;
        ServletOutputStream out = null;
        try {
            ClassPathResource resource = new ClassPathResource(templatePath);
            InputStream inputStream = resource.getInputStream();
            boolean isExcel2003 = templatePath.toLowerCase().endsWith("xls")?true:false;
            if(isExcel2003){
                workbook = new HSSFWorkbook(inputStream);
            }else{
                workbook = new XSSFWorkbook(inputStream);
            }
            
            Sheet sheet = workbook.getSheetAt(0);//sheet页开始行
            JSONArray json= JSONArray.parseArray(JSON.toJSONString(sourceList));//todo

            cusFormCont(cellConList,sheet);//插入自定义内容
            //得到class的属性列表
            int dataStartRow =insertRow;//数据开始插入的行数
            Class clazz = targetClass;
            Field[] fs=clazz.getDeclaredFields();

            for (int i = 0; i < json.size() ; i++) {
                int cellNum = 0;
                JSONObject obj  = json.getJSONObject(i);
                if (obj.size()>0) {
                    Row dataRows = sheet.createRow(dataStartRow +i);
                    for(Field f:fs){//f为单个属性
                        f.setAccessible(true); //设置私有属性的访问权限
                        dataRows.createCell(cellNum).setCellValue(obj.get(f.getName())==null?"":obj.get(f.getName())+"") ;
                        cellNum++;
                    }
                }
            }
           
//response.setCharacterEncoding("UTF-8");
//todo 升级spingboot 报错后,注掉
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode("excelexport"+DateUtils.formatNoSign(new Date()), "UTF-8") + ".xlsx");
            out = response.getOutputStream();
            workbook.write(out);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } finally {
            if(out!=null){
                out.close();
            }
            if(workbook!=null){
                workbook.close();
            }
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletContext; import net.sf.jxls.transformer.XLSTransformer; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class TextAction extends ActionSupport { /** */ private static final long serialVersionUID = 1L; private String filename; @SuppressWarnings("rawtypes") public String export() throws Exception { String templateFile = "18.xls"; // String sql = "select * from t_ry order by rybm"; // exportAndDownload(templateFile, DataBase.retrieve(sql)); List datas = new ArrayList(); @SuppressWarnings("unchecked") HashMap map = new HashMap(); map.put("name", "1111"); datas.add(map); exportAndDownload(templateFile, datas); return SUCCESS; } @SuppressWarnings({ "rawtypes", "unchecked" }) public void exportAndDownload(String templateFile, List datas) { try { filename = UUID.randomUUID() + templateFile; // FacesContext context = FacesContext.getCurrentInstance(); // ServletContext servletContext = (ServletContext) // context.getExternalContext().getContext(); ServletContext servletContext = ServletActionContext .getServletContext(); String path = servletContext.getRealPath("\\ExcelFile"); String srcFilePath = path + "\\template\\" + templateFile; String destFilePath = path + "\\download\\" + filename; Map beanParams = new HashMap(); beanParams.put("results", datas); XLSTransformer transfer = new XLSTransformer(); transfer.transformXLS(srcFilePath, beanParams, destFilePath); // Browser.execClientScript("window.location.href='../ExcelFile/downloadfile.jsp?filename=" // + destFile + "';"); } catch (Exception e) { e.printStackTrace(); } } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值