| | |
| | | for (SalesLedger ledger : ledgerList) { |
| | | XSSFSheet sheet = workbook.createSheet(ledger.getSalesContractNo()); |
| | | |
| | | sheet.setColumnWidth(0, 2500); |
| | | sheet.setColumnWidth(1, 4000); |
| | | sheet.setColumnWidth(2, 9000); |
| | | sheet.setColumnWidth(3, 2500); |
| | | sheet.setColumnWidth(4, 3000); |
| | | sheet.setColumnWidth(5, 4500); |
| | | sheet.setColumnWidth(6, 2000); |
| | | sheet.setColumnWidth(0, 1310); // 4.56 → 精准显示 |
| | | sheet.setColumnWidth(1, 4000); // 15.06 → 精准显示 |
| | | sheet.setColumnWidth(2, 8980); // 34.43 → 精准显示 |
| | | sheet.setColumnWidth(3, 1820); // 6.56 → 精准显示 |
| | | sheet.setColumnWidth(4, 2880); // 10.68 → 精准显示 |
| | | sheet.setColumnWidth(5, 5090); // 19.31 → 精准显示 |
| | | sheet.setColumnWidth(6, 1410); // 4.97 → 精准显示 |
| | | |
| | | CellStyle companyTitle = createBaseStyle(workbook, "宋体", (short) 20, true, true); |
| | | CellStyle billTitle = createBaseStyle(workbook, "宋体", (short) 18, true, true); |
| | | CellStyle billTitle = createBaseStyle(workbook, "宋体", (short) 18, false, true); |
| | | CellStyle headerStyle = createBorderStyle(workbook, "宋体", (short) 12, true, true); |
| | | CellStyle dataCenterStyle = createBorderStyle(workbook, "宋体", (short) 11, false, true); |
| | | |
| | |
| | | fillMergeRange(sheet, 0, 0, 0, 6, companyTitle); |
| | | |
| | | Row row1 = sheet.createRow(1); |
| | | row1.createCell(0).setCellValue("送 货 单"); |
| | | row1.createCell(0).setCellValue("送 货 单"); |
| | | sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 6)); |
| | | fillMergeRange(sheet, 1, 1, 0, 6, billTitle); |
| | | |
| | | Customer customer = customerMapper.selectById(ledger.getCustomerId()); |
| | | |
| | | Row row2 = sheet.createRow(2); |
| | | row2.setHeightInPoints(13); |
| | | row2.createCell(0).setCellValue("客户名称:" + ledger.getCustomerName()); |
| | | row2.createCell(4).setCellValue("单据编号:" + ledger.getSalesContractNo()); |
| | | |
| | | Row row3 = sheet.createRow(3); |
| | | row3.setHeightInPoints(13); |
| | | row3.createCell(0).setCellValue("送货地址:" + customer.getCompanyAddress()); |
| | | row3.createCell(4).setCellValue("送货日期:" + formatDate(LocalDate.now())); |
| | | |
| | | // 空行 |
| | | Row row4 = sheet.createRow(4); |
| | | row4.createCell(0).setCellValue("联系方式:" + customer.getContactPerson() + " " + customer.getContactPhone()); |
| | | row4.setHeightInPoints(13); |
| | | row4.createCell(4).setCellValue("联系电话:" + customer.getCompanyPhone()); |
| | | |
| | | Row row5 = sheet.createRow(5); |
| | | row5.createCell(0).setCellValue("送货单位:湖南鹏创电子有限公司"); |
| | | row5.createCell(0).setCellValue("联系方式:" + customer.getContactPerson() + " " + customer.getContactPhone()); |
| | | Row row6 = sheet.createRow(6); |
| | | row6.createCell(0).setCellValue("地址:湖南省耒阳市创新创业园A1栋"); |
| | | row6.createCell(0).setCellValue("送货单位:湖南鹏创电子有限公司"); |
| | | Row row7 = sheet.createRow(7); |
| | | row7.createCell(0).setCellValue("货物详细信息:"); |
| | | row7.createCell(0).setCellValue("地址:湖南省耒阳市创新创业园A1栋"); |
| | | Row row8 = sheet.createRow(8); |
| | | row8.createCell(0).setCellValue("货物详细信息:"); |
| | | |
| | | int tableStart = 8; |
| | | int tableStart = 9; |
| | | Row headerRow = sheet.createRow(tableStart); |
| | | headerRow.setHeightInPoints((short)22); |
| | | |
| | | String[] headers = {"序号", "物料编号", "品名/规格", "单位", "数量", "订单号", "共四联"}; |
| | | for (int i = 0; i < headers.length; i++) { |
| | | Cell hc = headerRow.createCell(i); |
| | |
| | | for (int i = 0; i < productList.size(); i++) { |
| | | SalesLedgerProduct p = productList.get(i); |
| | | Row dataRow = sheet.createRow(currentRow++); |
| | | dataRow.setHeightInPoints((short)22); |
| | | |
| | | String materialCode = ""; |
| | | if (p.getProductModelId() != null) { |
| | |
| | | for (int i = 0; i < needEmpty; i++) { |
| | | int seq = productList.size() + i; |
| | | Row dataRow = sheet.createRow(currentRow++); |
| | | dataRow.setHeightInPoints((short)22); |
| | | |
| | | for (int c = 0; c <= 5; c++) dataRow.createCell(c).setCellStyle(dataCenterStyle); |
| | | |
| | |
| | | |
| | | // 合计 |
| | | Row totalRow = sheet.createRow(currentRow); |
| | | sheet.addMergedRegion(new CellRangeAddress(currentRow, currentRow, 0, 3)); |
| | | totalRow.createCell(0).setCellValue("合计"); |
| | | totalRow.setHeightInPoints((short)22); |
| | | |
| | | // 合计放在第二列,不合并单元格 |
| | | totalRow.createCell(1).setCellValue("合计"); |
| | | totalRow.createCell(4).setCellValue(totalQuantity.doubleValue()); |
| | | fillMergeRange(sheet, currentRow, currentRow, 0, 5, dataCenterStyle); |
| | | |
| | | // 设置样式 |
| | | for (int c = 0; c <= 5; c++) { |
| | | Cell cell = totalRow.getCell(c) != null ? totalRow.getCell(c) : totalRow.createCell(c); |
| | | cell.setCellStyle(dataCenterStyle); |
| | | } |
| | | totalRow.createCell(6).setCellStyle(centerNoBorder); |
| | | |
| | | // 备注 |
| | | currentRow++; |
| | | Row emptyRow1 = sheet.createRow(currentRow); |
| | | emptyRow1.setHeightInPoints((short) 9); // 行高9磅 |
| | | |
| | | currentRow++; |
| | | Row remarkRow = sheet.createRow(currentRow); |
| | | remarkRow.createCell(0).setCellValue("备注:贵司在收货后请即刻核实数量及品质,若有异议,请在3日内提出,否则视为收受。"); |
| | | remarkRow.createCell(0).setCellValue("备注:贵司在收货后请即刻核实数量及品质,若有异议,请在3日内提出,否则视为收妥。"); |
| | | sheet.addMergedRegion(new CellRangeAddress(currentRow, currentRow, 0, 6)); |
| | | |
| | | currentRow++; |
| | | Row emptyRow2 = sheet.createRow(currentRow); |
| | | emptyRow2.setHeightInPoints((short) 9); // 行高9磅 |
| | | |
| | | currentRow++; |
| | | Row sign1 = sheet.createRow(currentRow); |
| | | sign1.createCell(0).setCellValue("送货单位(签章):"); |
| | | sign1.createCell(5).setCellValue("收货单位:"); |
| | | sign1.createCell(4).setCellValue("收货单位:"); |
| | | |
| | | currentRow++; |
| | | Row sign2 = sheet.createRow(currentRow); |
| | | sign2.createCell(0).setCellValue("送货人:"); |
| | | sign2.createCell(5).setCellValue("收货人:"); |
| | | sign2.createCell(4).setCellValue("收货人:"); |
| | | } |
| | | |
| | | workbook.write(response.getOutputStream()); |
| | |
| | | } |
| | | } |
| | | |
| | | // 工具类不动 |
| | | // 工具类 |
| | | private CellStyle createBaseStyle(Workbook workbook, String fontName, short fontSize, boolean bold, boolean center) { |
| | | CellStyle style = workbook.createCellStyle(); |
| | | Font font = workbook.createFont(); |
| | |
| | | return null; |
| | | } |
| | | return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | } |
| | | |
| | | /** |
| | | * 设置单元格样式 |
| | | */ |
| | | private void setCellStyle(Cell cell, boolean isHeader, boolean isTitle) { |
| | | Workbook workbook = cell.getSheet().getWorkbook(); |
| | | CellStyle style = workbook.createCellStyle(); |
| | | |
| | | // 设置对齐方式 |
| | | style.setAlignment(HorizontalAlignment.CENTER); |
| | | style.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | |
| | | // 设置边框 |
| | | style.setBorderTop(BorderStyle.THIN); |
| | | style.setBorderBottom(BorderStyle.THIN); |
| | | style.setBorderLeft(BorderStyle.THIN); |
| | | style.setBorderRight(BorderStyle.THIN); |
| | | |
| | | // 设置字体 |
| | | Font font = workbook.createFont(); |
| | | font.setFontName("宋体"); |
| | | if (isTitle) { |
| | | font.setFontHeightInPoints((short) 16); |
| | | font.setBold(true); |
| | | } else if (isHeader) { |
| | | font.setFontHeightInPoints((short) 12); |
| | | font.setBold(true); |
| | | } else { |
| | | font.setFontHeightInPoints((short) 11); |
| | | } |
| | | style.setFont(font); |
| | | |
| | | cell.setCellStyle(style); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 送货单样式处理器 |
| | | */ |
| | | public static class ShippingNoteStyleHandler implements com.alibaba.excel.write.handler.CellWriteHandler { |
| | | @Override |
| | | public void beforeCellCreate(com.alibaba.excel.write.metadata.holder.WriteSheetHolder writeSheetHolder, com.alibaba.excel.write.metadata.holder.WriteTableHolder writeTableHolder, org.apache.poi.ss.usermodel.Row row, com.alibaba.excel.metadata.Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { |
| | | } |
| | | |
| | | // @Override |
| | | // public void afterCellDispose(com.alibaba.excel.write.metadata.holder.WriteSheetHolder writeSheetHolder, com.alibaba.excel.write.metadata.holder.WriteTableHolder writeTableHolder, org.apache.poi.ss.usermodel.Cell cell, com.alibaba.excel.metadata.Head head, Integer relativeRowIndex, Boolean isHead) { |
| | | // org.apache.poi.ss.usermodel.Workbook workbook = writeSheetHolder.getSheet().getWorkbook(); |
| | | // org.apache.poi.ss.usermodel.Sheet sheet = writeSheetHolder.getSheet(); |
| | | // |
| | | // // 设置列宽 |
| | | // sheet.setColumnWidth(0, 6000); // 序号 |
| | | // sheet.setColumnWidth(1, 6000); // 物料编号 |
| | | // sheet.setColumnWidth(2, 10000); // 品名/规格 |
| | | // sheet.setColumnWidth(3, 4000); // 单位 |
| | | // sheet.setColumnWidth(4, 4000); // 数量 |
| | | // sheet.setColumnWidth(5, 6000); // 订单号 |
| | | // sheet.setColumnWidth(6, 4000); // 共四联 |
| | | // |
| | | // // 设置单元格样式 |
| | | // org.apache.poi.ss.usermodel.CellStyle style = workbook.createCellStyle(); |
| | | // style.setAlignment(org.apache.poi.ss.usermodel.HorizontalAlignment.CENTER); |
| | | // style.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER); |
| | | // style.setBorderTop(org.apache.poi.ss.usermodel.BorderStyle.THIN); |
| | | // style.setBorderBottom(org.apache.poi.ss.usermodel.BorderStyle.THIN); |
| | | // style.setBorderLeft(org.apache.poi.ss.usermodel.BorderStyle.THIN); |
| | | // style.setBorderRight(org.apache.poi.ss.usermodel.BorderStyle.THIN); |
| | | // |
| | | // // 设置字体 |
| | | // org.apache.poi.ss.usermodel.Font font = workbook.createFont(); |
| | | // font.setFontName("宋体"); |
| | | // font.setFontHeightInPoints((short) 11); |
| | | // style.setFont(font); |
| | | // |
| | | // cell.setCellStyle(style); |
| | | // } |
| | | } |
| | | |
| | | @Override |