设备导出excel 及模版下载
This commit is contained in:
parent
112a69babe
commit
946c2e27db
|
|
@ -9,8 +9,8 @@ public class ExcelExportField extends ImportExcelField {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ExcelProperty(value="",index = 3)
|
// @ExcelProperty(value="",index = 3)
|
||||||
private String cellFourth;
|
// private String cellFourth;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ public class ExportDeviceHelper {
|
||||||
.needHead(false)//是否需要head
|
.needHead(false)//是否需要head
|
||||||
.build();
|
.build();
|
||||||
buildHeader(2, voObj.getDeviceInfo(), sheet, writer, tableNoCounting);
|
buildHeader(2, voObj.getDeviceInfo(), sheet, writer, tableNoCounting);
|
||||||
buildList(voObj.getSingleList(), sheet, writer, tableNoCounting);
|
buildList(voObj.getSingleList(), sheet, writer, tableNoCounting);
|
||||||
writer.finish();
|
writer.finish();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -170,13 +170,18 @@ public class ExportDeviceHelper {
|
||||||
int columnWidth = cell.getStringCellValue().getBytes().length;
|
int columnWidth = cell.getStringCellValue().getBytes().length;
|
||||||
switch (cellIndex) {
|
switch (cellIndex) {
|
||||||
case 0:
|
case 0:
|
||||||
columnWidth = 30;
|
columnWidth = 50;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
columnWidth = 40;
|
columnWidth = 70;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
columnWidth = 80;
|
columnWidth = 20;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
|
||||||
|
columnWidth = 40;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -190,57 +195,58 @@ public class ExportDeviceHelper {
|
||||||
// 自定义表头样式处理
|
// 自定义表头样式处理
|
||||||
|
|
||||||
if (context.getHead() != null && context.getHead().booleanValue()) {
|
if (context.getHead() != null && context.getHead().booleanValue()) {
|
||||||
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
if(cellIndex==0 || cellIndex ==1) {
|
||||||
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
||||||
CellStyle cellStyle = initCellStyle(workbook);
|
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
||||||
|
|
||||||
XSSFCellStyle xssfCellStyle = (XSSFCellStyle) workbook.createCellStyle();
|
|
||||||
xssfCellStyle.cloneStyleFrom(cellStyle);
|
|
||||||
xssfCellStyle.getFont().setBold(true);
|
|
||||||
|
|
||||||
xssfCellStyle.setAlignment(HorizontalAlignment.LEFT);
|
CellStyle cellStyle = initCellStyle(workbook);
|
||||||
xssfCellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 0)));
|
|
||||||
xssfCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
||||||
cell.setCellStyle(xssfCellStyle);
|
|
||||||
context.getFirstCellData().setWriteCellStyle(null); //必须
|
|
||||||
|
|
||||||
|
XSSFCellStyle xssfCellStyle = (XSSFCellStyle) workbook.createCellStyle();
|
||||||
|
xssfCellStyle.cloneStyleFrom(cellStyle);
|
||||||
|
xssfCellStyle.getFont().setBold(true);
|
||||||
|
|
||||||
|
xssfCellStyle.setAlignment(HorizontalAlignment.LEFT);
|
||||||
|
xssfCellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 0)));
|
||||||
|
xssfCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
cell.setCellStyle(xssfCellStyle);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// WriteCellStyle.merge( xssfCellStyle., context.getFirstCellData().getOrCreateStyle());
|
||||||
|
context.getFirstCellData().setWriteCellStyle(null); //必须
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
if(cellIndex ==1){
|
||||||
|
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
||||||
|
Sheet sheet = writeSheetHolder.getSheet();
|
||||||
|
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowIndex, rowIndex, 0, 1);
|
||||||
|
sheet.addMergedRegion(cellRangeAddress);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context.getHead() == null || !context.getHead().booleanValue()) {
|
// if (context.getHead() == null || !context.getHead().booleanValue()) {
|
||||||
|
|
||||||
if (cellIndex == 1 || cellIndex == 2) {
|
|
||||||
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
|
||||||
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
|
||||||
|
|
||||||
// WriteCellStyle contentWriteCellStyle = EasyExcelUtil.getBodyStyle();
|
|
||||||
// CellStyle cellStyle = StyleUtil.buildCellStyle(workbook, null, contentWriteCellStyle);
|
|
||||||
//
|
//
|
||||||
// XSSFCellStyle xssfCellStyle = (XSSFCellStyle) workbook.createCellStyle();
|
// if (cellIndex == 1 || cellIndex == 2) {
|
||||||
// xssfCellStyle.cloneStyleFrom(cellStyle);
|
// WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
||||||
// xssfCellStyle.setAlignment(HorizontalAlignment.LEFT);
|
// Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
||||||
// xssfCellStyle.setFont(new XSSFFont());
|
|
||||||
// xssfCellStyle.getFont().setBold(false);
|
|
||||||
// xssfCellStyle.getFont().setFontName("宋体");
|
|
||||||
// xssfCellStyle.getFont().setFontHeightInPoints((short) 11);
|
|
||||||
//
|
//
|
||||||
// context.getFirstCellData().setWriteCellStyle(null); //必须
|
// WriteCellData<?> writeCellData = context.getFirstCellData();
|
||||||
// cell.setCellStyle(xssfCellStyle);
|
// WriteCellStyle customCellStyle = EasyExcelUtil.getBodyStyle();
|
||||||
|
//
|
||||||
|
// WriteFont customFont = new WriteFont();
|
||||||
WriteCellData<?> writeCellData = context.getFirstCellData();
|
// customFont.setFontName("宋体");
|
||||||
WriteCellStyle customCellStyle = EasyExcelUtil.getBodyStyle();
|
// customFont.setFontHeightInPoints((short) 11);
|
||||||
|
// customFont.setBold(false);
|
||||||
WriteFont customFont = new WriteFont();
|
// customCellStyle.setWriteFont(customFont);
|
||||||
customFont.setFontName("宋体");
|
// customCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
||||||
customFont.setFontHeightInPoints((short) 11);
|
// WriteCellStyle.merge(customCellStyle, writeCellData.getOrCreateStyle());
|
||||||
customFont.setBold(false);
|
//
|
||||||
customCellStyle.setWriteFont(customFont);
|
// }
|
||||||
customCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
// }
|
||||||
WriteCellStyle.merge(customCellStyle, writeCellData.getOrCreateStyle());
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -256,13 +262,14 @@ public class ExportDeviceHelper {
|
||||||
List<String> head1 = new ArrayList<String>();
|
List<String> head1 = new ArrayList<String>();
|
||||||
head1.add(customer);
|
head1.add(customer);
|
||||||
List<String> head2 = new ArrayList<String>();
|
List<String> head2 = new ArrayList<String>();
|
||||||
head2.add(customer);
|
head2.add("");
|
||||||
|
List<String> head3 = new ArrayList<String>();
|
||||||
|
head3.add("");
|
||||||
|
|
||||||
list.add(head0);
|
list.add(head0);
|
||||||
list.add(head1);
|
list.add(head1);
|
||||||
list.add(head2);
|
list.add(head2);
|
||||||
|
list.add(head3);
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -282,7 +289,10 @@ public class ExportDeviceHelper {
|
||||||
.writerTable(tableNoCounting.get())
|
.writerTable(tableNoCounting.get())
|
||||||
.needHead(Boolean.FALSE)
|
.needHead(Boolean.FALSE)
|
||||||
.registerWriteHandler(
|
.registerWriteHandler(
|
||||||
new OnceAbsoluteMergeStrategy(tableNoCounting.get(), tableNoCounting.get(), 0, maxColumn)
|
new OnceAbsoluteMergeStrategy(0, 0, 0, maxColumn)
|
||||||
|
)
|
||||||
|
.registerWriteHandler(
|
||||||
|
new OnceAbsoluteMergeStrategy(1, 1, 0, 1)
|
||||||
)
|
)
|
||||||
.registerWriteHandler(new CellWriteHandler() {
|
.registerWriteHandler(new CellWriteHandler() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -298,10 +308,17 @@ public class ExportDeviceHelper {
|
||||||
})
|
})
|
||||||
.registerWriteHandler(new HorizontalCellStyleStrategy(EasyExcelUtil.getHeadStyle(), body))
|
.registerWriteHandler(new HorizontalCellStyleStrategy(EasyExcelUtil.getHeadStyle(), body))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
List<String> cellList = new ArrayList<>();
|
List<String> cellList = new ArrayList<>();
|
||||||
cellList.add(String.format("%s %s", header.getDeviceNo(), header.getDeviceName()));
|
cellList.add(StrUtil.format("{} {}", header.getDeviceNo(), header.getDeviceName()));
|
||||||
|
List<String> cellList2 = new ArrayList<>();
|
||||||
|
cellList2.add("选配内容");
|
||||||
|
cellList2.add("");
|
||||||
|
cellList2.add("标配\\可选");
|
||||||
|
cellList2.add("备注");
|
||||||
List<List<String>> rowList = new ArrayList<>();
|
List<List<String>> rowList = new ArrayList<>();
|
||||||
rowList.add(cellList);
|
rowList.add(cellList);
|
||||||
|
rowList.add(cellList2);
|
||||||
//写入表格
|
//写入表格
|
||||||
writer.write(rowList, sheet, table);
|
writer.write(rowList, sheet, table);
|
||||||
}
|
}
|
||||||
|
|
@ -335,18 +352,21 @@ public class ExportDeviceHelper {
|
||||||
for (OptionalEbomImportVO item2 : list2) {
|
for (OptionalEbomImportVO item2 : list2) {
|
||||||
{
|
{
|
||||||
String opChildName = item2.getOptionName();
|
String opChildName = item2.getOptionName();
|
||||||
String optionChildDrawingNoName = item2.getOptionDrawingNo();
|
String optionChildDrawingNo = item2.getOptionDrawingNo();
|
||||||
List<OptionalEbomImportChildVO> list3 = item2.getChild();
|
List<OptionalEbomImportChildVO> list3 = item2.getChild();
|
||||||
for (OptionalEbomImportChildVO item3 : list3) {
|
for (OptionalEbomImportChildVO item3 : list3) {
|
||||||
ImportExcelField excelField = new ImportExcelField();
|
ImportExcelField excelField = new ImportExcelField();
|
||||||
excelField.setCellFirst(optionParentDrawingNoName);
|
excelField.setCellFirst(StrUtil.format("{} {}",optionChildDrawingNo,opChildName));
|
||||||
excelField.setCellSecond(String.format("%s %s", optionChildDrawingNoName, opChildName));
|
|
||||||
if(StrUtil.isEmpty(item3.getDrawingNo())) {
|
if(StrUtil.isEmpty(item3.getDrawingNo())) {
|
||||||
excelField.setCellThird(String.format("%s:(%s)", item3.getMaterialName(), item3.getChooseStatus() == 1 ? "标配" : "可选"));
|
excelField.setCellSecond(StrUtil.format("{}", item3.getMaterialName()));
|
||||||
}else {
|
}else {
|
||||||
excelField.setCellThird(String.format("%s:%s(%s)", item3.getDrawingNo(), item3.getMaterialName(), item3.getChooseStatus() == 1 ? "标配" : "可选"));
|
excelField.setCellSecond(StrUtil.format ("{}:{}", item3.getDrawingNo(), item3.getMaterialName()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
excelField.setCellThird(StrUtil.format("{}",item3.getChooseStatus() == 1 ? "标配" : "可选")) ;
|
||||||
|
excelField.setCellFourth(item3.getRemak()); ;
|
||||||
items.add(excelField);
|
items.add(excelField);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -358,11 +378,12 @@ public class ExportDeviceHelper {
|
||||||
if (CollectionUtil.isNotEmpty(items)) {
|
if (CollectionUtil.isNotEmpty(items)) {
|
||||||
tableNoCounting.getAndIncrement();
|
tableNoCounting.getAndIncrement();
|
||||||
WriteTable table = EasyExcel.writerTable(tableNoCounting.get())
|
WriteTable table = EasyExcel.writerTable(tableNoCounting.get())
|
||||||
.head(getHeader(opParentName))
|
.head(getHeader(StrUtil.format("{} {}",opParentName,optionParentDrawingNoName)))
|
||||||
.needHead(Boolean.TRUE)//需要Header
|
.needHead(Boolean.TRUE)//需要Header
|
||||||
|
.automaticMergeHead(false)
|
||||||
.registerWriteHandler(EasyExcelUtil.getDefaultStyle())//传入自定义样式
|
.registerWriteHandler(EasyExcelUtil.getDefaultStyle())//传入自定义样式
|
||||||
.registerWriteHandler(new HeaderStyleCustomCellWriteHandler())
|
.registerWriteHandler(new HeaderStyleCustomCellWriteHandler())
|
||||||
.registerWriteHandler(new ColumnMergeStrategy(0, new int[]{0, 1}))
|
.registerWriteHandler(new ColumnMergeStrategy(1, new int[]{0}))
|
||||||
.build();
|
.build();
|
||||||
writer.write(items, sheet, table);
|
writer.write(items, sheet, table);
|
||||||
items.clear();
|
items.clear();
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class ImportExcelField{
|
||||||
|
|
||||||
|
|
||||||
@ExcelProperty(value="",index = 3)
|
@ExcelProperty(value="",index = 3)
|
||||||
private String cellRemark;
|
private String cellFourth;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,384 @@
|
||||||
|
package com.nflg.product.bomnew.excel;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import com.alibaba.excel.ExcelWriter;
|
||||||
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||||
|
import com.alibaba.excel.util.StyleUtil;
|
||||||
|
import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
|
||||||
|
import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy;
|
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||||
|
import com.alibaba.excel.write.metadata.WriteTable;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||||
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||||
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
|
import com.nflg.product.bomnew.pojo.vo.OptionalEbomConfigAggregVO;
|
||||||
|
import com.nflg.product.bomnew.pojo.vo.OptionalEbomImportChildVO;
|
||||||
|
import com.nflg.product.bomnew.pojo.vo.OptionalEbomImportVO;
|
||||||
|
import com.nflg.product.bomnew.pojo.vo.OptionalEbomMainVO;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFColor;
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
public class OldExportDeviceHelper {
|
||||||
|
|
||||||
|
|
||||||
|
public void export(OutputStream filePath, OptionalEbomConfigAggregVO voObj) {
|
||||||
|
|
||||||
|
//使用一个计数器记录当前已经写了几个表格
|
||||||
|
AtomicInteger tableNoCounting = new AtomicInteger(0);
|
||||||
|
ExcelWriter writer = EasyExcel.write(filePath)//指定写入的流
|
||||||
|
.excelType(ExcelTypeEnum.XLSX)//指定Excel文件类型,如xlsx、xls
|
||||||
|
.autoCloseStream(Boolean.FALSE)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
WriteSheet sheet = EasyExcel
|
||||||
|
.writerSheet("EBOM导出")//指定写入的sheet
|
||||||
|
.needHead(false)//是否需要head
|
||||||
|
.build();
|
||||||
|
buildHeader(2, voObj.getDeviceInfo(), sheet, writer, tableNoCounting);
|
||||||
|
buildList(voObj.getSingleList(), sheet, writer, tableNoCounting);
|
||||||
|
writer.finish();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static class ColumnMergeStrategy implements CellWriteHandler {
|
||||||
|
|
||||||
|
|
||||||
|
private int[] mergeColumnIndex;
|
||||||
|
private int mergeRowIndex;
|
||||||
|
|
||||||
|
public ColumnMergeStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
|
||||||
|
this.mergeRowIndex = mergeRowIndex;
|
||||||
|
this.mergeColumnIndex = mergeColumnIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
if (!isHead) {
|
||||||
|
//当前行
|
||||||
|
int curRowIndex = cell.getRowIndex();
|
||||||
|
//当前列
|
||||||
|
int curColIndex = cell.getColumnIndex();
|
||||||
|
// System.out.println(StrUtil.format("curRowIndex {} curColIndex {}",curRowIndex,curColIndex));
|
||||||
|
if (curRowIndex > mergeRowIndex) {
|
||||||
|
for (int i = 0; i < mergeColumnIndex.length; i++) {
|
||||||
|
if (curColIndex == mergeColumnIndex[i]) {
|
||||||
|
mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前单元格向上合并
|
||||||
|
*
|
||||||
|
* @param writeSheetHolder
|
||||||
|
* @param cell 当前单元格
|
||||||
|
* @param curRowIndex 当前行
|
||||||
|
* @param curColIndex 当前列
|
||||||
|
*/
|
||||||
|
private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
|
||||||
|
Object curData = cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
|
||||||
|
Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
|
||||||
|
Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
|
||||||
|
// 将当前单元格数据与上一个单元格数据比较
|
||||||
|
Boolean dataBool = preData.equals(curData);
|
||||||
|
if (dataBool) {
|
||||||
|
Sheet sheet = writeSheetHolder.getSheet();
|
||||||
|
List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
|
||||||
|
boolean isMerged = false;
|
||||||
|
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
|
||||||
|
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
|
||||||
|
// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
|
||||||
|
if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
|
||||||
|
sheet.removeMergedRegion(i);
|
||||||
|
cellRangeAddr.setLastRow(curRowIndex);
|
||||||
|
sheet.addMergedRegion(cellRangeAddr);
|
||||||
|
isMerged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 若上一个单元格未被合并,则新增合并单元
|
||||||
|
if (!isMerged) {
|
||||||
|
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
|
||||||
|
sheet.addMergedRegion(cellRangeAddress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class HeaderStyleCustomCellWriteHandler extends AbstractCellWriteHandler {
|
||||||
|
@Override
|
||||||
|
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
|
||||||
|
Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
// 设置行高
|
||||||
|
int rowIndex = row.getRowNum();
|
||||||
|
short height = 400;
|
||||||
|
row.setHeight(height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CellStyle initCellStyle(Workbook workbook) {
|
||||||
|
WriteCellStyle contentWriteCellStyle = EasyExcelUtil.getHeadStyle();
|
||||||
|
CellStyle headWriteCellStyle = StyleUtil.buildCellStyle(workbook, null, contentWriteCellStyle);
|
||||||
|
return headWriteCellStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(CellWriteHandlerContext context) {
|
||||||
|
Cell cell = context.getCell();
|
||||||
|
int rowIndex = cell.getRowIndex();
|
||||||
|
|
||||||
|
int cellIndex = cell.getColumnIndex();
|
||||||
|
|
||||||
|
// 自定义宽度处理
|
||||||
|
if (!context.getHead()) {
|
||||||
|
int columnWidth = cell.getStringCellValue().getBytes().length;
|
||||||
|
switch (cellIndex) {
|
||||||
|
case 0:
|
||||||
|
columnWidth = 30;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
columnWidth = 40;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
columnWidth = 80;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (columnWidth > 255) {
|
||||||
|
columnWidth = 255;
|
||||||
|
}
|
||||||
|
context.getWriteSheetHolder().getSheet().setColumnWidth(cellIndex, columnWidth * 256);
|
||||||
|
}
|
||||||
|
// 自定义表头样式处理
|
||||||
|
|
||||||
|
if (context.getHead() != null && context.getHead().booleanValue()) {
|
||||||
|
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
||||||
|
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
||||||
|
CellStyle cellStyle = initCellStyle(workbook);
|
||||||
|
|
||||||
|
XSSFCellStyle xssfCellStyle = (XSSFCellStyle) workbook.createCellStyle();
|
||||||
|
xssfCellStyle.cloneStyleFrom(cellStyle);
|
||||||
|
xssfCellStyle.getFont().setBold(true);
|
||||||
|
|
||||||
|
xssfCellStyle.setAlignment(HorizontalAlignment.LEFT);
|
||||||
|
xssfCellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 0)));
|
||||||
|
xssfCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
cell.setCellStyle(xssfCellStyle);
|
||||||
|
context.getFirstCellData().setWriteCellStyle(null); //必须
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context.getHead() == null || !context.getHead().booleanValue()) {
|
||||||
|
|
||||||
|
if (cellIndex == 1 || cellIndex == 2) {
|
||||||
|
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
|
||||||
|
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
|
||||||
|
|
||||||
|
// WriteCellStyle contentWriteCellStyle = EasyExcelUtil.getBodyStyle();
|
||||||
|
// CellStyle cellStyle = StyleUtil.buildCellStyle(workbook, null, contentWriteCellStyle);
|
||||||
|
//
|
||||||
|
// XSSFCellStyle xssfCellStyle = (XSSFCellStyle) workbook.createCellStyle();
|
||||||
|
// xssfCellStyle.cloneStyleFrom(cellStyle);
|
||||||
|
// xssfCellStyle.setAlignment(HorizontalAlignment.LEFT);
|
||||||
|
// xssfCellStyle.setFont(new XSSFFont());
|
||||||
|
// xssfCellStyle.getFont().setBold(false);
|
||||||
|
// xssfCellStyle.getFont().setFontName("宋体");
|
||||||
|
// xssfCellStyle.getFont().setFontHeightInPoints((short) 11);
|
||||||
|
//
|
||||||
|
// context.getFirstCellData().setWriteCellStyle(null); //必须
|
||||||
|
// cell.setCellStyle(xssfCellStyle);
|
||||||
|
|
||||||
|
|
||||||
|
WriteCellData<?> writeCellData = context.getFirstCellData();
|
||||||
|
WriteCellStyle customCellStyle = EasyExcelUtil.getBodyStyle();
|
||||||
|
|
||||||
|
WriteFont customFont = new WriteFont();
|
||||||
|
customFont.setFontName("宋体");
|
||||||
|
customFont.setFontHeightInPoints((short) 11);
|
||||||
|
customFont.setBold(false);
|
||||||
|
customCellStyle.setWriteFont(customFont);
|
||||||
|
customCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
||||||
|
WriteCellStyle.merge(customCellStyle, writeCellData.getOrCreateStyle());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<List<String>> getHeader(String headStr) {
|
||||||
|
String customer = headStr;
|
||||||
|
List<List<String>> list = new ArrayList<List<String>>();
|
||||||
|
List<String> head0 = new ArrayList<String>();
|
||||||
|
head0.add(customer);
|
||||||
|
List<String> head1 = new ArrayList<String>();
|
||||||
|
head1.add(customer);
|
||||||
|
List<String> head2 = new ArrayList<String>();
|
||||||
|
head2.add(customer);
|
||||||
|
|
||||||
|
|
||||||
|
list.add(head0);
|
||||||
|
list.add(head1);
|
||||||
|
list.add(head2);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void buildHeader(int maxColumn, OptionalEbomMainVO header, WriteSheet sheet, ExcelWriter writer, AtomicInteger tableNoCounting) {
|
||||||
|
if (header == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WriteCellStyle body = EasyExcelUtil.getBodyStyle();
|
||||||
|
if (body.getWriteFont() != null) {
|
||||||
|
body.getWriteFont().setBold(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WriteTable table = EasyExcel
|
||||||
|
.writerTable(tableNoCounting.get())
|
||||||
|
.needHead(Boolean.FALSE)
|
||||||
|
.registerWriteHandler(
|
||||||
|
new OnceAbsoluteMergeStrategy(tableNoCounting.get(), tableNoCounting.get(), 0, maxColumn)
|
||||||
|
)
|
||||||
|
.registerWriteHandler(new CellWriteHandler() {
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(CellWriteHandlerContext context) {
|
||||||
|
Cell cell = context.getCell();
|
||||||
|
int rowIndex = cell.getRowIndex();
|
||||||
|
int cellIndex = cell.getColumnIndex();
|
||||||
|
if (rowIndex == 0) {
|
||||||
|
short height = 500;
|
||||||
|
context.getRow().setHeight(height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.registerWriteHandler(new HorizontalCellStyleStrategy(EasyExcelUtil.getHeadStyle(), body))
|
||||||
|
.build();
|
||||||
|
List<String> cellList = new ArrayList<>();
|
||||||
|
cellList.add(String.format("%s %s", header.getDeviceNo(), header.getDeviceName()));
|
||||||
|
List<List<String>> rowList = new ArrayList<>();
|
||||||
|
rowList.add(cellList);
|
||||||
|
//写入表格
|
||||||
|
writer.write(rowList, sheet, table);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建列表部分
|
||||||
|
*/
|
||||||
|
public void buildList(List<OptionalEbomImportVO> listTable, WriteSheet sheet, ExcelWriter writer, AtomicInteger tableNoCounting) {
|
||||||
|
|
||||||
|
if (CollectionUtil.isEmpty(listTable)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ImportExcelField> items = new ArrayList<>();
|
||||||
|
String opParentName="";
|
||||||
|
String optionParentDrawingNoName="";
|
||||||
|
|
||||||
|
for ( int row =0;row< listTable.size();row++ ) {
|
||||||
|
|
||||||
|
OptionalEbomImportVO item1=listTable.get(row);
|
||||||
|
opParentName = item1.getOptionName();
|
||||||
|
optionParentDrawingNoName = item1.getOptionDrawingNo();
|
||||||
|
|
||||||
|
List<OptionalEbomImportVO> list2 = item1.getChild();
|
||||||
|
// List<String> cellList = new ArrayList<>();
|
||||||
|
// cellList.add(opParentName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (OptionalEbomImportVO item2 : list2) {
|
||||||
|
{
|
||||||
|
String opChildName = item2.getOptionName();
|
||||||
|
String optionChildDrawingNoName = item2.getOptionDrawingNo();
|
||||||
|
List<OptionalEbomImportChildVO> list3 = item2.getChild();
|
||||||
|
for (OptionalEbomImportChildVO item3 : list3) {
|
||||||
|
ImportExcelField excelField = new ImportExcelField();
|
||||||
|
excelField.setCellFirst(optionParentDrawingNoName);
|
||||||
|
excelField.setCellSecond(String.format("%s %s", optionChildDrawingNoName, opChildName));
|
||||||
|
if(StrUtil.isEmpty(item3.getDrawingNo())) {
|
||||||
|
excelField.setCellThird(String.format("%s:(%s)", item3.getMaterialName(), item3.getChooseStatus() == 1 ? "标配" : "可选"));
|
||||||
|
}else {
|
||||||
|
excelField.setCellThird(String.format("%s:%s(%s)", item3.getDrawingNo(), item3.getMaterialName(), item3.getChooseStatus() == 1 ? "标配" : "可选"));
|
||||||
|
|
||||||
|
}
|
||||||
|
items.add(excelField);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(items)) {
|
||||||
|
tableNoCounting.getAndIncrement();
|
||||||
|
WriteTable table = EasyExcel.writerTable(tableNoCounting.get())
|
||||||
|
.head(getHeader(opParentName))
|
||||||
|
.needHead(Boolean.TRUE)//需要Header
|
||||||
|
.registerWriteHandler(EasyExcelUtil.getDefaultStyle())//传入自定义样式
|
||||||
|
.registerWriteHandler(new HeaderStyleCustomCellWriteHandler())
|
||||||
|
.registerWriteHandler(new ColumnMergeStrategy(0, new int[]{0, 1}))
|
||||||
|
.build();
|
||||||
|
writer.write(items, sheet, table);
|
||||||
|
items.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -128,7 +128,7 @@ public class OptionalExcelService {
|
||||||
levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_NO.getValue());
|
levelDto3.setChooseStatus(OptionalBomConstant.ChooseStatusEnum.CHOOSE_STATUS_NO.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
levelDto3.setRemak(item.getCellRemark());
|
levelDto3.setRemak(item.getCellFourth());
|
||||||
optionalEbomImportLevel2Dto.getChild().add(levelDto3);
|
optionalEbomImportLevel2Dto.getChild().add(levelDto3);
|
||||||
// levelDto3.setMaterialName(materialName.replace("(标配)", "").replace("(可选)", ""));
|
// levelDto3.setMaterialName(materialName.replace("(标配)", "").replace("(可选)", ""));
|
||||||
// levelDto3.setMaterialDesc(levelDto3.getMaterialDesc());
|
// levelDto3.setMaterialDesc(levelDto3.getMaterialDesc());
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue