java使用模板导出Excel表格

java使用模板导出Excel表格



模板示例



一、引入依赖

<dependency>
	 <groupId>org.apache.poi</groupId>
	 <artifactId>poi</artifactId>
	 <version>3.9</version>
 </dependency>

二、使用步骤

1.添加工具类

package com.test.common.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.test.aliyunApi.HuaweiyunOss;
import com.test.skycloud.consts.DeleteFlag;
import com.test.skycloud.modules.foodTraceability.entity.FoodTraceability;
import com.test.skycloud.modules.foodTraceability.service.IFoodTraceabilityService;
import com.test.skycloud.modules.foodTraceability.vo.FoodTraceabilityQueryVo;
import com.test.skycloud.modules.foodTraceability.vo.HSSFWorkVo;
import com.test.skycloud.modules.manufacturerInformation.entity.ManufacturerInformation;
import com.test.skycloud.modules.manufacturerInformation.mapper.ManufacturerInformationMapper;
import com.test.skycloud.modules.system.entity.Category;
import com.test.skycloud.modules.system.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

@Slf4j
public class ExcelUtil {

    @Autowired
    private static HuaweiyunOss huaweiyunOss;
    @Autowired
    private static IFoodTraceabilityService foodTraceabilityService;
    @Autowired
    private static ICategoryService categoryService;
    @Autowired
    private static ManufacturerInformationMapper manufacturerInformationMapper;


    public static void addSheet(HSSFWorkbook wb, HSSFSheet sheet, List<HSSFWorkVo> hssfWorkVoList
    ) throws IOException {
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
        sheet.setColumnWidth(6, 6000);
        sheet.setColumnWidth(7, 6000);
        sheet.setColumnWidth(8, 6000);
        sheet.setColumnWidth(8, 6000);
        int i = 0;
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        for (HSSFWorkVo data : hssfWorkVoList) {//基本信息\第一模块 行,列
            //第一模块
            i++;
            HSSFRow row = sheet.getRow(i);
            if (row == null) {
                row = sheet.createRow(i);
            }
            //heightInPoints 设置的值永远是height属性值的30倍
            row.setHeightInPoints(30);
            row.createCell(0).setCellValue(i);
            row.createCell(1).setCellValue(data.getManufacturerName());
            row.createCell(2).setCellValue(data.getManufacturerContacts());
            row.createCell(3).setCellValue(data.getManufacturerPhone());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            if (null != data.getEntryTime()) {
                row.createCell(4).setCellValue(sdf.format(data.getEntryTime()));
            }
            row.createCell(5).setCellValue(data.getFoodName());
            row.createCell(6).setCellValue(data.getUserName());
            row.createCell(7).setCellValue(data.getCategoryDishesName());
            row.createCell(8).setCellValue(data.getDescription());
        }
    }

    /**
     * 导出--返回下载URL
     * @param wb
     * @param fileName
     * @return
     * @throws Exception
     */
    public static Response<?> export(HSSFWorkbook wb, String fileName) throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        wb.write(bos);
        byte[] bytes = bos.toByteArray();
        InputStream is = new ByteArrayInputStream(bytes);
        boolean b = huaweiyunOss.uploadFile(fileName, HuaweiyunOss.FileType.EXPORT_FOOD_TRACEABILITY, is);
        bos.close();
        is.close();
        if (b) {
            String downloadUrl1 = huaweiyunOss.getDownloadUrl(fileName, HuaweiyunOss.FileType.EXPORT_FOOD_TRACEABILITY);
            return Response.success(downloadUrl1);
        }
        return Response.success();
    }

    /**
     * 直接导出
     * @param response
     * @param wb
     * @param fileName
     * @throws IOException
     */
    private static void export(HttpServletResponse response, HSSFWorkbook wb, String fileName) throws IOException {
        //输出Excel文件
        OutputStream output = response.getOutputStream();
        response.reset();
        response.setContentType("application/vnd.ms-excel");
        String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
        if (StringUtils.isNotBlank(fileName) && StringUtils.isNotBlank(fileName)) {
            response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
        }
        wb.write(output);
        output.close();
    }

    /**
     * 填入数据 -- 导出数据
     *
     * @param wb
     */
    public static void insert(HSSFWorkbook wb, FoodTraceabilityQueryVo queryVo) throws IOException {
        //获取列表全部数据
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar dateNow = Calendar.getInstance();
        dateNow.add(Calendar.DAY_OF_MONTH, -1);
        Date time = dateNow.getTime();
        String format = sdf.format(time);
        HSSFSheet sheet = wb.cloneSheet(0);
        //sheet名称
        wb.setSheetName(1, format);
        //获取每一个列表对应的详情数据

        QueryWrapper<FoodTraceability> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(FoodTraceability::getDeleteFlag, DeleteFlag.NORMAL.getStatus());
        if(StringUtils.isNotEmpty(queryVo.getSchoolId())){
            queryWrapper.lambda().eq(FoodTraceability::getSchoolId, queryVo.getSchoolId());
        }
        queryWrapper.lambda().orderByDesc(FoodTraceability::getCreateTime);
        List<FoodTraceability> foodTraceabilityList = foodTraceabilityService.list(queryWrapper);

        QueryWrapper<Category> queryW = new QueryWrapper<>();
        queryW.lambda().eq(Category::getDeleteFlag, DeleteFlag.NORMAL.getStatus());
        Map<String, String> categoryMap = categoryService.list(queryW).parallelStream().collect(Collectors.toMap(Category::getId, Category::getName));

        Set<String> manufactorIds = foodTraceabilityList.parallelStream().map(FoodTraceability::getManufactorId).collect(Collectors.toSet());
        Map<String, ManufacturerInformation> manufactorNames = manufactorIds.isEmpty() ? Collections.emptyMap() : manufacturerInformationMapper.selectBatchIds(manufactorIds).parallelStream().collect(Collectors.toMap(ManufacturerInformation::getId, d -> d));

        List<HSSFWorkVo> list = new ArrayList<>();
        foodTraceabilityList.stream().forEach(d -> {
            HSSFWorkVo hssfWorkVo = new HSSFWorkVo();
            if (StringUtils.isNotEmpty(d.getAutograph())) {
                hssfWorkVo.setUserName(d.getUserName());//录入人员
            }
            hssfWorkVo.setCategoryDishesName(categoryMap.get(d.getCategoryDishes()));
            hssfWorkVo.setDescription(d.getDescription());
            hssfWorkVo.setEntryTime(d.getEntryTime());
            hssfWorkVo.setFoodName(d.getFoodName());
            //获取厂家信息
            ManufacturerInformation manufacturerInformation = manufactorNames.get(d.getManufactorId());
            if (null != manufacturerInformation) {
                hssfWorkVo.setManufacturerName(manufacturerInformation.getManufacturerName());
                hssfWorkVo.setManufacturerContacts(manufacturerInformation.getManufacturerContacts());
                hssfWorkVo.setManufacturerPhone(manufacturerInformation.getManufacturerPhone());
            }
            hssfWorkVo.setPhysicalPhotos(d.getPhysicalPhotos());
            hssfWorkVo.setQualityInspectionReport(d.getQualityInspectionReport());
            list.add(hssfWorkVo);
        });
        ExcelUtil.addSheet(wb, sheet, list);//把数据加入sheet中
    }


}

2.导出Excel

@ApiOperation(value = "导出")
    @PostMapping("/export")
    public Response<?> export(@RequestBody FoodTraceabilityQueryVo query) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar dateNow = Calendar.getInstance();
        dateNow.add(Calendar.DAY_OF_MONTH, -1);
        Date time = dateNow.getTime();
        String format = sdf.format(time);
        String fileName = format + ".xls";
        //下载模板
        byte[] bytes = huaweiyunOss.downloadFile("test.xls", HuaweiyunOss.FileType.EXPORT_FOOD_TRACEABILITY);
        if (null == bytes) {
            return Response.error();
        }
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        POIFSFileSystem ps = new POIFSFileSystem(byteArrayInputStream);
        HSSFWorkbook wb = new HSSFWorkbook(ps);
        //查询数据并且插入
        ExcelUtil.insert(wb,query);
        wb.removeSheetAt(0);
        return ExcelUtil.export(wb, fileName);
    }

根据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、付费专栏及课程。

余额充值