JAVA WEB用POI导出EXECL多个Sheet

前端方法:调用exportInfoPid这个方法并传入要查询的id即可,也可以用其他参数看个人需求

javascript 复制代码
function exportInfoPid(id){
	window.location.href = 服务地址+"/exportMdsRoutePid/"+id;
}

后端控制层代码

java 复制代码
@Controller
@Scope("prototype")
@RequestMapping("mms/mds/mdsroute/mdsRouteController")
public class MdsRouteController implements LoaderConstant {
@Autowired
private MdsRouteAPI mdsRouteAPI;
@Autowired
private MdsRouteExportExcel mdsRouteExportExcel;

/**
     * 工艺导出
     *
     * @param pid
     * @param request
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/operation/exportMdsRoutePid/{pid}")
    public Boolean exportMdsRoutePid(@PathVariable String pid, HttpServletRequest request,HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView();
        //查询数据
        MdsRouteDTO mdsRouteDTO = mdsRouteAPI.getRouteSeqTime(pid);
        //查询到的数据写入Execl
        mdsRouteExportExcel.mdsExportExcel(response,mdsRouteDTO);
        return true;
    }
}

通过一下方法创建多个Sheet表,要几个创建几个

Sheet sheet2 = wb.createSheet("工序信息");

Execl写入并返回信息到服务端

java 复制代码
package avicit.mms.mds.mdsroute.controller;

import avicit.mms.mds.mdsoperationseq.dto.MdsOperationSeqDTO;
import avicit.mms.mds.mdsroute.dto.MdsRouteDTO;
import com.google.common.net.HttpHeaders;
import org.apache.commons.compress.utils.Charsets;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;

/**
 * Execl导出
 */
@Component
public class MdsRouteExportExcel {
    
    public void mdsExportExcel(HttpServletResponse response,MdsRouteDTO mdsRouteDTO) {
        Workbook wb = new XSSFWorkbook();
        //设置单元格式
        //表头设置
        Font fontHead = wb.createFont();
        fontHead.setColor(Font.COLOR_NORMAL);
        fontHead.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        CellStyle cellStyleHead = wb.createCellStyle();
        cellStyleHead.setFont(fontHead);
        cellStyleHead.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyleHead.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);
        //数据内容设置
        Font font = wb.createFont();
        font.setColor(Font.COLOR_NORMAL);
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setFont(font);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);
        //创建第一个工作表
        Sheet sheet = wb.createSheet("主工艺信息");
        List<String[]> rowValues = new ArrayList<>();
        String[] rowHeadValue = {
                "*指令号",
                "*指令名称",
                "*工艺版本",
                "*BOM分类",
                "*零组件号",
                "*主制部门编号",
                "主制部门部门",
                "*指令类型",
                "*标记"
        };
        rowValues.add(rowHeadValue);
        String[] rowValue = {
                null == mdsRouteDTO.getRouteCode() ? "" :mdsRouteDTO.getRouteCode(),
                null == mdsRouteDTO.getRouteName() ? "" : mdsRouteDTO.getRouteName(),
                null == mdsRouteDTO.getRevisionNo() ? "" :  mdsRouteDTO.getRevisionNo(),
                "",
                null == mdsRouteDTO.getMdsItemCode() ? "" :  mdsRouteDTO.getMdsItemCode(),
                null == mdsRouteDTO.getMainDeptCode() ? "" :  mdsRouteDTO.getMainDeptCode(),
                null == mdsRouteDTO.getMainDeptName() ? "" :  mdsRouteDTO.getMainDeptName(),
                null == mdsRouteDTO.getRouteType() ? "" :  mdsRouteDTO.getRouteType(),
                null == mdsRouteDTO.getRouteStage() ? "" :  mdsRouteDTO.getRouteStage()
        };
        rowValues.add(rowValue);
        Sheet sheet2 = wb.createSheet("工序信息");
        for (int i = 0; i < rowValues.size(); i++){
            Row currentRow = sheet.createRow(i);
            // 获取当前行的数据
            String[] cellValues = rowValues.get(i);
            for (int j = 0; j < cellValues.length; j++) {
                // 设置列宽
                sheet.setColumnWidth(j, 4200);
                Cell cell = currentRow.createCell(j);
                if (i==0) {
                    cell.setCellStyle(cellStyleHead);
                }else {
                    cell.setCellStyle(cellStyle);
                }
                //每个单元格的值目前做 String 处理
                cell.setCellValue(cellValues[j]);
            }
        }
        //创建第二个工作表
        List<String[]> rowValues2 = new ArrayList<>();
        //第二个工作表表头
        String[] rowHeadValue2 = {
                "*零组件号",
                "*工序号",
                "*工序名称",
                "*工序内码",
                "*加工车间(车间代码)",
                "车间名称",
                "*检验标识",
                "*采集标识",
                "*计划准结时间(分钟)",
                "*计划加工时间(分钟)"
        };
        rowValues2.add(rowHeadValue2);
        //服务端数据整理
        if(mdsRouteDTO.getMdsOperationSeqDTOList()!=null) {
            for (MdsOperationSeqDTO seqDTO : mdsRouteDTO.getMdsOperationSeqDTOList()) {
                String[] rowValue2 = {
                        null == mdsRouteDTO.getMdsItemCode() ? "" : mdsRouteDTO.getMdsItemCode(),
                        null == seqDTO.getOperationSeqNo() ? "" : seqDTO.getOperationSeqNo(),
                        null == seqDTO.getOperationSeqName() ? "" : seqDTO.getOperationSeqName(),
                        0 == seqDTO.getInnerOrder() ? "" : seqDTO.getInnerOrder() + "",
                        null == seqDTO.getMainDeptCode() ? "" : seqDTO.getMainDeptCode(),
                        null == seqDTO.getMainDeptName() ? "" : seqDTO.getMainDeptName(),
                        null == seqDTO.getCheckFlag() ? "" : seqDTO.getCheckFlag(),
                        null == seqDTO.getRecordFlag() ? "" : seqDTO.getRecordFlag(),
                        null == seqDTO.getPlanSetupTime() ? "" : seqDTO.getPlanSetupTime().toString(),
                        null == seqDTO.getPlanRunTime() ? "" : seqDTO.getPlanRunTime().toString()
                };
                rowValues2.add(rowValue2);
            }
        }
        for (int i = 0; i < rowValues2.size(); i++){
            Row currentRow2 = sheet2.createRow(i);
            // 获取当前行的数据
            String[] cellValues = rowValues2.get(i);
            for (int j = 0; j < cellValues.length; j++) {
                // 设置列宽
                sheet2.setColumnWidth(j, 5200);
                Cell cell = currentRow2.createCell(j);
                if (i==0) {
                    cell.setCellStyle(cellStyleHead);
                }else {
                    cell.setCellStyle(cellStyle);
                }
                //每个单元格的值目前做 String 处理
                cell.setCellValue(cellValues[j]);
            }
        }
        writeToExcel(response, wb, "导出工艺数据表");
    }

    /**
     * 数据写入Execl返回请求
     * @param response
     * @param workbook
     * @param fileName
     */
    public void writeToExcel(HttpServletResponse response, Workbook workbook, String fileName) {
        OutputStream os = null;
        try {
            response.setContentType(CONTENT_TYPE);
            response.setCharacterEncoding(Charsets.UTF_8.name());
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", new String(URLEncoder.encode(fileName + ".xlsx" , Charsets.UTF_8.name())
                    .getBytes(Charsets.UTF_8), Charsets.ISO_8859_1)));
            os = response.getOutputStream();
            workbook.write(os);
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

单元格背景色的设置目前没试验出来,可能是我用的版本有冲突吧,网上查的结果是这两个函数,可以自己尝试,单元格的设置可以了解一下CellStyle

java 复制代码
cellStyleHead.setFillBackgroundColor(IndexedColors.CORNFLOWER_BLUE.getIndex());
cellStyleHead.setFillPattern(FillPatternType.SOLID_FOREGROUND);;
相关推荐
懒大王爱吃狼39 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
逐·風5 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法