对比新文件 |
| | |
| | | package com.nanometer.smartlab.service; |
| | | |
| | | import com.nanometer.smartlab.exception.BusinessException; |
| | | import com.nanometer.smartlab.exception.ExceptionEnumCode; |
| | | import org.apache.poi.hssf.usermodel.*; |
| | | import org.apache.poi.ss.usermodel.BorderStyle; |
| | | import org.apache.poi.ss.usermodel.HorizontalAlignment; |
| | | import org.apache.poi.ss.usermodel.IndexedColors; |
| | | import org.apache.poi.ss.usermodel.VerticalAlignment; |
| | | import org.apache.poi.ss.util.CellRangeAddress; |
| | | import org.apache.poi.ss.util.RegionUtil; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.OutputStream; |
| | | import java.net.URLEncoder; |
| | | |
| | | |
| | | @Service("accountInAndOutService") |
| | | public class AccountInAndOutServiceImpl implements AccountInAndOutService { |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void exportExcel(HttpServletResponse resp) { |
| | | |
| | | try { |
| | | // 创建文档对象 |
| | | HSSFWorkbook wb = new HSSFWorkbook(); |
| | | // 创建sheet对象 |
| | | HSSFSheet sheet = wb.createSheet("出入库 台账"); |
| | | |
| | | sheet.setDefaultRowHeight((short) (20 * 20)); |
| | | |
| | | //设置字体 |
| | | HSSFFont headFont = wb.createFont(); |
| | | headFont.setFontName("宋体"); |
| | | headFont.setFontHeightInPoints((short) 11); |
| | | headFont.setBold(true); |
| | | HSSFFont bodyFont = wb.createFont(); |
| | | bodyFont.setFontName("宋体"); |
| | | bodyFont.setFontHeightInPoints((short) 10); |
| | | |
| | | |
| | | // 边框颜色和样式 |
| | | HSSFCellStyle defaultBorderStyle = wb.createCellStyle(); |
| | | defaultBorderStyle.setBorderBottom(BorderStyle.THIN); |
| | | defaultBorderStyle.setBottomBorderColor(IndexedColors.BLACK.index); |
| | | defaultBorderStyle.setBorderTop(BorderStyle.THIN); |
| | | defaultBorderStyle.setTopBorderColor(IndexedColors.BLACK.index); |
| | | defaultBorderStyle.setBorderLeft(BorderStyle.THIN); |
| | | defaultBorderStyle.setLeftBorderColor(IndexedColors.BLACK.index); |
| | | defaultBorderStyle.setBorderRight(BorderStyle.THIN); |
| | | defaultBorderStyle.setRightBorderColor(IndexedColors.BLACK.index); |
| | | |
| | | // 默认字体和剧中 |
| | | HSSFCellStyle defaultStyle = wb.createCellStyle(); |
| | | defaultStyle.setFont(bodyFont); |
| | | defaultStyle.setWrapText(true); |
| | | defaultStyle.setAlignment(HorizontalAlignment.CENTER); |
| | | defaultStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | |
| | | // 默认标题头部样式 |
| | | HSSFCellStyle defaultHeadStyle = wb.createCellStyle(); |
| | | defaultHeadStyle.setFont(headFont); |
| | | defaultHeadStyle.setWrapText(true); |
| | | defaultHeadStyle.setAlignment(HorizontalAlignment.CENTER); |
| | | defaultHeadStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | |
| | | // 固定列数和设置宽度 |
| | | int[] width = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}; |
| | | for (int columnIndex = 0; columnIndex < width.length; columnIndex++) { |
| | | sheet.setColumnWidth(columnIndex, width[columnIndex] * 256); |
| | | sheet.setDefaultColumnStyle(columnIndex, defaultBorderStyle); |
| | | } |
| | | |
| | | |
| | | // exc |
| | | // 0.数据准备 |
| | | |
| | | |
| | | // 1.创建表头 |
| | | this.createTableHead(sheet, defaultHeadStyle, defaultStyle, "", 0); |
| | | // 2.创建数据行 |
| | | // 过滤出数据 |
| | | // this.createTableBody(sheet, defaultHeadStyle, defaultStyle, 3); |
| | | |
| | | // 返回文件 |
| | | String filename = "2022年易制毒出入库台账.xlsx"; |
| | | resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); |
| | | resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); |
| | | OutputStream outputStream = resp.getOutputStream(); |
| | | wb.write(outputStream); |
| | | outputStream.flush(); |
| | | outputStream.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "系统导出失败,请联系管理员"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | private void setBorder(CellRangeAddress region, HSSFSheet sheet){ |
| | | RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet); |
| | | RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet); |
| | | RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet); |
| | | RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet); |
| | | } |
| | | |
| | | |
| | | private void createTableHead(HSSFSheet sheet, HSSFCellStyle defaultHeadStyle, HSSFCellStyle defaultStyle, String title, int i) { |
| | | |
| | | // 一月易制毒化学品出入库台账 |
| | | HSSFRow row0 = sheet.createRow(i); |
| | | HSSFCell cell00 = row0.createCell(i); |
| | | // 设置默认行高 不然 row 可以自定义 |
| | | |
| | | cell00.setCellStyle(defaultHeadStyle); |
| | | cell00.setCellValue("一月易制毒化学品出入库台账"); |
| | | CellRangeAddress cra = new CellRangeAddress(i, i, 0, 9); |
| | | setBorder(cra, sheet); |
| | | sheet.addMergedRegion(cra); |
| | | // 品名:乙醚(单位:L) |
| | | HSSFCell cell01 = row0.createCell(10); |
| | | cell01.setCellStyle(defaultStyle); |
| | | cell01.setCellValue("品名:乙醚(单位:L)"); |
| | | CellRangeAddress cra0 = new CellRangeAddress(i, i, 10, 13); |
| | | setBorder(cra0, sheet); |
| | | sheet.addMergedRegion(cra0); |
| | | // 换行 |
| | | HSSFRow row1 = sheet.createRow(i + 1); |
| | | // row1.setHeight((short) (20 * 20)); |
| | | // 日期 |
| | | HSSFCell cell10 = row1.createCell(0); |
| | | cell10.setCellStyle(defaultStyle); |
| | | cell10.setCellValue("日期"); |
| | | CellRangeAddress cra10 = new CellRangeAddress(i + 1, i + 2, 0, 0); |
| | | setBorder(cra10, sheet); |
| | | sheet.addMergedRegion(cra10); |
| | | // 入库 |
| | | HSSFCell cell11 = row1.createCell(1); |
| | | cell11.setCellStyle(defaultStyle); |
| | | cell11.setCellValue("入库"); |
| | | CellRangeAddress address = new CellRangeAddress(i + 1, i + 1, 1, 5); |
| | | setBorder(address, sheet); |
| | | sheet.addMergedRegion(address); |
| | | |
| | | // 出库 |
| | | HSSFCell cell12 = row1.createCell(6); |
| | | cell12.setCellStyle(defaultStyle); |
| | | cell12.setCellValue("出库"); |
| | | CellRangeAddress cra12 = new CellRangeAddress(i + 1, i + 1, 6, 11); |
| | | setBorder(cra12, sheet); |
| | | sheet.addMergedRegion(cra12); |
| | | |
| | | |
| | | // 库存数量 |
| | | HSSFCell cell13 = row1.createCell(12); |
| | | cell13.setCellStyle(defaultStyle); |
| | | cell13.setCellValue("库存数量"); |
| | | CellRangeAddress cra13 = new CellRangeAddress(i + 1, i + 2, 12, 13); |
| | | setBorder(cra13, sheet); |
| | | sheet.addMergedRegion(cra13); |
| | | |
| | | |
| | | HSSFRow row2 = sheet.createRow(i + 2); |
| | | // 入库数量 |
| | | HSSFCell cell21 = row2.createCell(1); |
| | | cell21.setCellStyle(defaultStyle); |
| | | cell21.setCellValue("入库数量"); |
| | | |
| | | // 入库单号 |
| | | HSSFCell cell22 = row2.createCell(2); |
| | | cell22.setCellStyle(defaultStyle); |
| | | cell22.setCellValue("入库单号"); |
| | | CellRangeAddress cra22 = new CellRangeAddress(i + 2, i + 2, 2, 4); |
| | | setBorder(cra22, sheet); |
| | | sheet.addMergedRegion(cra22); |
| | | |
| | | |
| | | // 保管员 |
| | | HSSFCell cell23 = row2.createCell(5); |
| | | cell23.setCellStyle(defaultStyle); |
| | | cell23.setCellValue("保管员"); |
| | | |
| | | // 出库数量 |
| | | HSSFCell cell24 = row2.createCell(6); |
| | | cell24.setCellStyle(defaultStyle); |
| | | cell24.setCellValue("出库数量"); |
| | | |
| | | |
| | | // 领料单号 |
| | | HSSFCell cell25 = row2.createCell(7); |
| | | cell25.setCellStyle(defaultStyle); |
| | | cell25.setCellValue("领料单号"); |
| | | CellRangeAddress cra25 = new CellRangeAddress(i + 2, i + 2, 7, 9); |
| | | setBorder(cra25, sheet); |
| | | sheet.addMergedRegion(cra25); |
| | | |
| | | // 经手人 |
| | | HSSFCell cell26 = row2.createCell(10); |
| | | cell26.setCellStyle(defaultStyle); |
| | | cell26.setCellValue("经手人"); |
| | | CellRangeAddress cra26 = new CellRangeAddress(i + 2, i + 2, 10, 11); |
| | | setBorder(cra26, sheet); |
| | | sheet.addMergedRegion(cra26); |
| | | } |
| | | |
| | | } |