导出Excel表格
This commit is contained in:
parent
58b235d078
commit
c452fbc650
@ -38,4 +38,12 @@ public class QcSourceController {
|
|||||||
return qcSourceService.queryQcSource(batchNo, machineNo, materialNo, mouldNo, varietyNo, craftItemNo);
|
return qcSourceService.queryQcSource(batchNo, machineNo, materialNo, mouldNo, varietyNo, craftItemNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出Excel表格
|
||||||
|
*/
|
||||||
|
@GetMapping("/exportExcel")
|
||||||
|
public String exportExcel(@RequestParam(required = false, value = "batchNo") String batchNo, @RequestParam(required = false, value = "machineNo") String machineNo, @RequestParam(required = false, value = "materialNo") String materialNo, @RequestParam(required = false, value = "mouldNo") String mouldNo, @RequestParam(required = false, value = "varietyNo") String varietyNo, @RequestParam(required = false, value = "craftItemNo") String craftItemNo) throws Exception {
|
||||||
|
return qcSourceService.exportExcel(batchNo, machineNo, materialNo, mouldNo, varietyNo, craftItemNo);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,9 @@ public interface QcSourceService {
|
|||||||
*/
|
*/
|
||||||
String queryQcSource(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo);
|
String queryQcSource(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出Excel表格
|
||||||
|
*/
|
||||||
|
String exportExcel(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,17 @@ import com.xkrs.util.ExcelUploadUtil;
|
|||||||
import com.xkrs.util.LocalDateUtils;
|
import com.xkrs.util.LocalDateUtils;
|
||||||
import com.xkrs.util.LocalStringUtils;
|
import com.xkrs.util.LocalStringUtils;
|
||||||
import org.apache.http.util.TextUtils;
|
import org.apache.http.util.TextUtils;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||||
|
import org.apache.poi.hssf.util.HSSFColor;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.apache.poi.xssf.usermodel.*;
|
||||||
import org.springframework.context.i18n.LocaleContextHolder;
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -45,6 +50,13 @@ public class QcSourceServiceImpl implements QcSourceService {
|
|||||||
@Resource
|
@Resource
|
||||||
private QcSpecDao qcSpecDao;
|
private QcSpecDao qcSpecDao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出excel样式一(表头顺序)
|
||||||
|
* 批次号 机器号 物料号 模具号 机种号
|
||||||
|
*/
|
||||||
|
List<String> EXCEL_HEAD_STYLE_ONE_NO = Arrays.asList("batchNo", "machineNo", "materialNo", "mouldNo", "varietyNo", "craftItemNo");
|
||||||
|
List<String> EXCEL_HEAD_STYLE_ONE_NAME = Arrays.asList("批次", "机器", "物料", "模具", "机种", "工艺项目");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加检验数据
|
* 添加检验数据
|
||||||
*/
|
*/
|
||||||
@ -127,6 +139,10 @@ public class QcSourceServiceImpl implements QcSourceService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String queryQcSource(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo) {
|
public String queryQcSource(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo) {
|
||||||
|
List<CraftItemEntity> craftItemList = craftItemDao.findAll();
|
||||||
|
if (craftItemList.isEmpty()) {
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "未添加工艺项目,请先添加工艺项目!", locale);
|
||||||
|
}
|
||||||
List<QcItemEntity> qcItemList = qcItemDao.findAll();
|
List<QcItemEntity> qcItemList = qcItemDao.findAll();
|
||||||
if (qcItemList.isEmpty()) {
|
if (qcItemList.isEmpty()) {
|
||||||
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "未添加检验项目,请先添加检验项目!", locale);
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "未添加检验项目,请先添加检验项目!", locale);
|
||||||
@ -163,12 +179,12 @@ public class QcSourceServiceImpl implements QcSourceService {
|
|||||||
Map<String, Object> emptyRoom = findEmptyRoom(resultList, batchNo, qcItemNo);
|
Map<String, Object> emptyRoom = findEmptyRoom(resultList, batchNo, qcItemNo);
|
||||||
if (emptyRoom == null) {
|
if (emptyRoom == null) {
|
||||||
Map<String, Object> newRoom = new HashMap<>();
|
Map<String, Object> newRoom = new HashMap<>();
|
||||||
newRoom.put("batchNo", batchNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(0), batchNo);
|
||||||
newRoom.put("machineNo", machineNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(1), machineNo);
|
||||||
newRoom.put("materialNo", materialNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(2), materialNo);
|
||||||
newRoom.put("mouldNo", mouldNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(3), mouldNo);
|
||||||
newRoom.put("varietyNo", varietyNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(4), varietyNo);
|
||||||
newRoom.put("craftItemNo", craftItemNo);
|
newRoom.put(EXCEL_HEAD_STYLE_ONE_NO.get(5), craftItemNo);
|
||||||
newRoom.put(qcItemNo, formatValue);
|
newRoom.put(qcItemNo, formatValue);
|
||||||
resultList.add(newRoom);
|
resultList.add(newRoom);
|
||||||
} else {
|
} else {
|
||||||
@ -228,4 +244,136 @@ public class QcSourceServiceImpl implements QcSourceService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出Excel表格
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String exportExcel(String batchNo, String machineNo, String materialNo, String mouldNo, String varietyNo, String craftItemNo) throws Exception {
|
||||||
|
List<CraftItemEntity> craftItemList = craftItemDao.findAll();
|
||||||
|
if (craftItemList.isEmpty()) {
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "未添加工艺项目,请先添加工艺项目!", locale);
|
||||||
|
}
|
||||||
|
List<QcItemEntity> qcItemList = qcItemDao.findAll();
|
||||||
|
if (qcItemList.isEmpty()) {
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "未添加检验项目,请先添加检验项目!", locale);
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> sourceList = qcSourceDao.queryQcSource(LocalStringUtils.formatEmptyValue(batchNo), LocalStringUtils.formatEmptyValue(machineNo), LocalStringUtils.formatEmptyValue(materialNo), LocalStringUtils.formatEmptyValue(mouldNo), LocalStringUtils.formatEmptyValue(varietyNo), LocalStringUtils.formatEmptyValue(craftItemNo));
|
||||||
|
List<Map<String, Object>> resultList = generateResultList(sourceList);
|
||||||
|
List<List<String>> formattedResultList = formatResultList(resultList, qcItemList);
|
||||||
|
if (formattedResultList.isEmpty()) {
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE, "暂时没有该检验数据的信息!", locale);
|
||||||
|
}
|
||||||
|
doExportExcel(formattedResultList);
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS, "导出成功!", locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化结果集数据
|
||||||
|
*/
|
||||||
|
private List<List<String>> formatResultList(List<Map<String, Object>> resultList, List<QcItemEntity> qcItemList) {
|
||||||
|
List<List<String>> formatResultList = new ArrayList<>();
|
||||||
|
if (resultList == null || resultList.isEmpty()) {
|
||||||
|
return formatResultList;
|
||||||
|
}
|
||||||
|
List<String> headList = new ArrayList<>(EXCEL_HEAD_STYLE_ONE_NAME);
|
||||||
|
for (QcItemEntity qcItemEntity : qcItemList) {
|
||||||
|
headList.add(qcItemEntity.getQcItemName());
|
||||||
|
}
|
||||||
|
formatResultList.add(headList);
|
||||||
|
for (Map<String, Object> dataMap : resultList) {
|
||||||
|
List<String> dataList = new ArrayList<>();
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(0), ""));
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(1), ""));
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(2), ""));
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(3), ""));
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(4), ""));
|
||||||
|
dataList.add((String) dataMap.getOrDefault(EXCEL_HEAD_STYLE_ONE_NO.get(5), ""));
|
||||||
|
for (QcItemEntity entity : qcItemList) {
|
||||||
|
String value = (String) dataMap.getOrDefault(entity.getQcItemNo(), "");
|
||||||
|
if (Constant.QC_ITEM_TYPE_STRING.equals(entity.getQcItemType())) {
|
||||||
|
dataList.add(value);
|
||||||
|
} else if (Constant.QC_ITEM_TYPE_PICTURE.equals(entity.getQcItemType())) {
|
||||||
|
if (value.startsWith("picture")) {
|
||||||
|
dataList.add("http://118.24.27.47:2088/" + value);
|
||||||
|
} else {
|
||||||
|
dataList.add(value);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dataList.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
formatResultList.add(dataList);
|
||||||
|
}
|
||||||
|
return formatResultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将格式化后的结果集数据导出为Excel文件
|
||||||
|
*/
|
||||||
|
private void doExportExcel(List<List<String>> dataListList) throws Exception {
|
||||||
|
//创建XSSFWorkbook对象(excel的文档对象)
|
||||||
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
||||||
|
//建立新的sheet对象(excel的表单)
|
||||||
|
XSSFSheet sheet = workbook.createSheet("测量数据表");
|
||||||
|
|
||||||
|
XSSFCellStyle highCellStyle = workbook.createCellStyle();
|
||||||
|
highCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
|
||||||
|
highCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
|
||||||
|
XSSFFont highFont = workbook.createFont();
|
||||||
|
highFont.setColor(HSSFColor.RED.index);
|
||||||
|
highCellStyle.setFont(highFont);
|
||||||
|
|
||||||
|
XSSFCellStyle lowCellStyle = workbook.createCellStyle();
|
||||||
|
lowCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
|
||||||
|
lowCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
|
||||||
|
XSSFFont lowFont = workbook.createFont();
|
||||||
|
lowFont.setColor(HSSFColor.BLUE.index);
|
||||||
|
lowCellStyle.setFont(lowFont);
|
||||||
|
|
||||||
|
XSSFCellStyle normalCellStyle = workbook.createCellStyle();
|
||||||
|
normalCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
|
||||||
|
normalCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
|
||||||
|
XSSFFont normalFont = workbook.createFont();
|
||||||
|
normalFont.setColor(HSSFColor.BLACK.index);
|
||||||
|
normalCellStyle.setFont(normalFont);
|
||||||
|
|
||||||
|
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
|
||||||
|
XSSFRow titleRow = sheet.createRow(0);
|
||||||
|
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
|
||||||
|
XSSFCell titleCell = titleRow.createCell(0);
|
||||||
|
//设置单元格内容
|
||||||
|
titleCell.setCellValue("测量数据导出表");
|
||||||
|
titleCell.setCellStyle(normalCellStyle);
|
||||||
|
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, dataListList.get(0).size() - 1));
|
||||||
|
int startRowNum = 1;
|
||||||
|
for (int i = 0; i < dataListList.size(); i++) {
|
||||||
|
List<String> dataList = dataListList.get(i);
|
||||||
|
if (dataList != null && dataList.size() > 0) {
|
||||||
|
XSSFRow row = sheet.createRow(i + startRowNum);
|
||||||
|
for (int j = 0; j < dataList.size(); j++) {
|
||||||
|
XSSFCell cell = row.createCell(j);
|
||||||
|
String data = dataList.get(j);
|
||||||
|
if (data.contains("##H")) {
|
||||||
|
cell.setCellValue(data.split("##")[0]);
|
||||||
|
cell.setCellStyle(highCellStyle);
|
||||||
|
} else if (data.contains("##L")) {
|
||||||
|
cell.setCellValue(data.split("##")[0]);
|
||||||
|
cell.setCellStyle(lowCellStyle);
|
||||||
|
} else {
|
||||||
|
cell.setCellValue(data);
|
||||||
|
cell.setCellStyle(normalCellStyle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//输出Excel文件
|
||||||
|
String excelFileName = System.currentTimeMillis() + ".xlsx";
|
||||||
|
FileOutputStream output = new FileOutputStream("/Users/liuchengqian/Desktop/DaJiang/excel/" + excelFileName);
|
||||||
|
workbook.write(output);
|
||||||
|
output.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,4 +11,5 @@ public interface Constant {
|
|||||||
* 检验项目类型:图片
|
* 检验项目类型:图片
|
||||||
*/
|
*/
|
||||||
String QC_ITEM_TYPE_PICTURE = "1";
|
String QC_ITEM_TYPE_PICTURE = "1";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,39 +12,10 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class ExportExcel {
|
public class ExportExcel {
|
||||||
|
|
||||||
/**
|
|
||||||
* 最简单的填充
|
|
||||||
*
|
|
||||||
* @since 2.1.1
|
|
||||||
*/
|
|
||||||
/*public static String simpleFill(Map<String, String> map,String templateFileName) {
|
|
||||||
|
|
||||||
|
|
||||||
String s = System.currentTimeMillis() + ".xlsx";
|
|
||||||
// 方案2 根据Map填充
|
|
||||||
String fileName = "/usr/local/excel/" + s;
|
|
||||||
//String fileName = "E:\\shoptest\\" + s;
|
|
||||||
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
|
|
||||||
|
|
||||||
ExcelWriterBuilder write = EasyExcel.write(fileName);
|
|
||||||
|
|
||||||
ExcelWriterBuilder excelWriterBuilder = write.withTemplate(templateFileName);
|
|
||||||
|
|
||||||
ExcelWriter build = excelWriterBuilder.build();
|
|
||||||
WriteSheet writeSheet = EasyExcel.writerSheet().build();
|
|
||||||
|
|
||||||
build.fill(map,writeSheet);
|
|
||||||
build.finish();
|
|
||||||
|
|
||||||
//EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);
|
|
||||||
return "http://118.24.27.47:2088/excel/"+s;
|
|
||||||
//return "http://192.168.2.139/"+s;
|
|
||||||
}*/
|
|
||||||
public static String exportToProveExcel(Map<String, String> dataMap, String srcFilePath) throws IOException, InvalidFormatException {
|
public static String exportToProveExcel(Map<String, String> dataMap, String srcFilePath) throws IOException, InvalidFormatException {
|
||||||
String s = System.currentTimeMillis() + ".xlsx";
|
String s = System.currentTimeMillis() + ".xlsx";
|
||||||
//String path = "E:/shop/"+s;
|
//String path = "E:/shop/"+s;
|
||||||
String path = "/home/sxy/server/industrial_measurement/excel/" + s;
|
String path = "/home/sxy/server/industrial_measurement/excel/" + s;
|
||||||
|
|
||||||
// 开始转换。利用 transformer 转到Excel
|
// 开始转换。利用 transformer 转到Excel
|
||||||
XLSTransformer transformer = new XLSTransformer();
|
XLSTransformer transformer = new XLSTransformer();
|
||||||
// 参数:srcFilePath:模板源文件 cMap:需要导出的数据 destFile.getAbsolutePath():下载的目标文件
|
// 参数:srcFilePath:模板源文件 cMap:需要导出的数据 destFile.getAbsolutePath():下载的目标文件
|
||||||
@ -53,15 +24,4 @@ public class ExportExcel {
|
|||||||
return "http://118.24.27.47:2088/excel/" + s;
|
return "http://118.24.27.47:2088/excel/" + s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public static void main(String[] args) throws IOException, InvalidFormatException {
|
|
||||||
// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
|
|
||||||
String templateFileName = TestFileUtil.getPath() + "templates" + File.separator + "test.xlsx";
|
|
||||||
Map<String, String> map = new HashMap<String, String>();
|
|
||||||
map.put("name", "张三");
|
|
||||||
map.put("sex", "男");
|
|
||||||
//simpleFill(map,templateFileName);
|
|
||||||
HttpServletResponse response = null;
|
|
||||||
String s = exportToProveExcel(map);
|
|
||||||
System.out.println(s);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user