From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-starter-excel/src/main/java/org/springblade/core/excel/util/ExcelUtil.java | 186 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 186 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-starter-excel/src/main/java/org/springblade/core/excel/util/ExcelUtil.java b/Source/BladeX-Tool/blade-starter-excel/src/main/java/org/springblade/core/excel/util/ExcelUtil.java new file mode 100644 index 0000000..48797b7 --- /dev/null +++ b/Source/BladeX-Tool/blade-starter-excel/src/main/java/org/springblade/core/excel/util/ExcelUtil.java @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 搴勯獮 (smallchill@163.com) + */ +package org.springblade.core.excel.util; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.builder.ExcelReaderBuilder; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.util.DateUtils; +import com.alibaba.excel.write.handler.WriteHandler; +import lombok.SneakyThrows; +import org.apache.commons.codec.Charsets; +import org.springblade.core.excel.listener.DataListener; +import org.springblade.core.excel.listener.ImportListener; +import org.springblade.core.excel.support.ExcelException; +import org.springblade.core.excel.support.ExcelImporter; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Date; +import java.util.List; + +/** + * Excel宸ュ叿绫� + * + * @author Chill + * @apiNote https://www.yuque.com/easyexcel/doc/easyexcel + */ +public class ExcelUtil { + + /** + * 璇诲彇excel鐨勬墍鏈塻heet鏁版嵁 + * + * @param excel excel鏂囦欢 + * @return List<Object> + */ + public static <T> List<T> read(MultipartFile excel, Class<T> clazz) { + DataListener<T> dataListener = new DataListener<>(); + ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz); + if (builder == null) { + return null; + } + builder.doReadAll(); + return dataListener.getDataList(); + } + + /** + * 璇诲彇excel鐨勬寚瀹歴heet鏁版嵁 + * + * @param excel excel鏂囦欢 + * @param sheetNo sheet搴忓彿(浠�0寮�濮�) + * @return List<Object> + */ + public static <T> List<T> read(MultipartFile excel, int sheetNo, Class<T> clazz) { + return read(excel, sheetNo, 1, clazz); + } + + /** + * 璇诲彇excel鐨勬寚瀹歴heet鏁版嵁 + * + * @param excel excel鏂囦欢 + * @param sheetNo sheet搴忓彿(浠�0寮�濮�) + * @param headRowNumber 琛ㄥご琛屾暟 + * @return List<Object> + */ + public static <T> List<T> read(MultipartFile excel, int sheetNo, int headRowNumber, Class<T> clazz) { + DataListener<T> dataListener = new DataListener<>(); + ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz); + if (builder == null) { + return null; + } + builder.sheet(sheetNo).headRowNumber(headRowNumber).doRead(); + return dataListener.getDataList(); + } + + /** + * 璇诲彇骞跺鍏ユ暟鎹� + * + * @param excel excel鏂囦欢 + * @param importer 瀵煎叆閫昏緫绫� + * @param <T> 娉涘瀷 + */ + public static <T> void save(MultipartFile excel, ExcelImporter<T> importer, Class<T> clazz) { + ImportListener<T> importListener = new ImportListener<>(importer); + ExcelReaderBuilder builder = getReaderBuilder(excel, importListener, clazz); + if (builder != null) { + builder.doReadAll(); + } + } + + /** + * 瀵煎嚭excel + * + * @param response 鍝嶅簲绫� + * @param dataList 鏁版嵁鍒楄〃 + * @param clazz class绫� + * @param <T> 娉涘瀷 + */ + @SneakyThrows + public static <T> void export(HttpServletResponse response, List<T> dataList, Class<T> clazz) { + export(response, DateUtils.format(new Date(), DateUtils.DATE_FORMAT_14), "瀵煎嚭鏁版嵁", dataList, clazz); + } + + /** + * 瀵煎嚭excel + * + * @param response 鍝嶅簲绫� + * @param fileName 鏂囦欢鍚� + * @param sheetName sheet鍚� + * @param dataList 鏁版嵁鍒楄〃 + * @param clazz class绫� + * @param <T> 娉涘瀷 + */ + @SneakyThrows + public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, Class<T> clazz) { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(Charsets.UTF_8.name()); + fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name()); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList); + } + + /** + * 瀵煎嚭excel + * + * @param response 鍝嶅簲绫� + * @param fileName 鏂囦欢鍚� + * @param sheetName sheet鍚� + * @param dataList 鏁版嵁鍒楄〃 + * @param clazz class绫� + * @param writeHandler 鑷畾涔夊鐞嗗櫒 + * @param <T> 娉涘瀷 + */ + @SneakyThrows + public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, WriteHandler writeHandler, Class<T> clazz) { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(Charsets.UTF_8.name()); + fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name()); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), clazz).registerWriteHandler(writeHandler).sheet(sheetName).doWrite(dataList); + } + + /** + * 鑾峰彇鏋勫缓绫� + * + * @param excel excel鏂囦欢 + * @param readListener excel鐩戝惉绫� + * @return ExcelReaderBuilder + */ + public static <T> ExcelReaderBuilder getReaderBuilder(MultipartFile excel, ReadListener<T> readListener, Class<T> clazz) { + String filename = excel.getOriginalFilename(); + if (StringUtils.isEmpty(filename)) { + throw new ExcelException("璇蜂笂浼犳枃浠�!"); + } + if ((!StringUtils.endsWithIgnoreCase(filename, ".xls") && !StringUtils.endsWithIgnoreCase(filename, ".xlsx"))) { + throw new ExcelException("璇蜂笂浼犳纭殑excel鏂囦欢!"); + } + InputStream inputStream; + try { + inputStream = new BufferedInputStream(excel.getInputStream()); + return EasyExcel.read(inputStream, clazz, readListener); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + +} -- Gitblit v1.9.3