🎨 Improving structure / format of the code.
This commit is contained in:
1 parent
45d3718ed6
commit
1b3bdd0197
3 files changed
+59
-89
No files matched your search
+10
-24
@@ -4,8 +4,8 @@ import com.alibaba.excel.ExcelWriter;
|
||||
import com.alibaba.excel.metadata.BaseRowModel;
|
||||
import com.alibaba.excel.metadata.Sheet;
|
||||
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.List;
|
||||
|
||||
@@ -24,40 +24,26 @@ public class ExcelWriterFactory extends ExcelWriter {
|
||||
this.outputStream = outputStream;
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public ExcelWriterFactory write(List<? extends BaseRowModel> list, String sheetName,
|
||||
BaseRowModel object) {
|
||||
this.sheetNo++;
|
||||
try {
|
||||
Sheet sheet = new Sheet(sheetNo, 0, object.getClass());
|
||||
sheet.setSheetName(sheetName);
|
||||
this.write(list, sheet);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
try {
|
||||
outputStream.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
Sheet sheet = new Sheet(sheetNo, 0, object.getClass());
|
||||
sheet.setSheetName(sheetName);
|
||||
this.write(list, sheet);
|
||||
outputStream.flush();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void finish() {
|
||||
super.finish();
|
||||
try {
|
||||
outputStream.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
//do something
|
||||
}
|
||||
outputStream.flush();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void close() {
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
//do something
|
||||
}
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -110,7 +110,7 @@ public class PreWriterHandler<T extends Class<? extends BaseRowModel>> implement
|
||||
if (cellStyle == null) {
|
||||
return;
|
||||
}
|
||||
//设置居中方式
|
||||
//设置样式
|
||||
cell.setCellStyle(cellStyle);
|
||||
}
|
||||
}
|
||||
+48
-64
@@ -11,13 +11,14 @@ import com.pig4cloud.common.excel.exception.ExcelException;
|
||||
import com.pig4cloud.common.excel.factory.ExcelWriterFactory;
|
||||
import com.pig4cloud.common.excel.handler.PreWriterHandler;
|
||||
import com.pig4cloud.common.excel.listener.ExcelListener;
|
||||
import lombok.Cleanup;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URLEncoder;
|
||||
@@ -35,7 +36,7 @@ import java.util.List;
|
||||
@UtilityClass
|
||||
public class ExcelUtils {
|
||||
|
||||
private final String DEFAULT_EXCEL_SHEET_NAME="Sheet1";
|
||||
private final String DEFAULT_EXCEL_SHEET_NAME = "Sheet1";
|
||||
|
||||
/**
|
||||
* 读取 Excel(多个 sheet)
|
||||
@@ -103,8 +104,8 @@ public class ExcelUtils {
|
||||
* @param <T>
|
||||
*/
|
||||
public <T extends BaseRowModel> void writeExcel(HttpServletResponse response, List<T> list,
|
||||
String fileName, Class<T> classType){
|
||||
writeExcel(response,list,fileName,null,classType);
|
||||
String fileName, Class<T> classType) {
|
||||
writeExcel(response, list, fileName, null, classType);
|
||||
}
|
||||
|
||||
|
||||
@@ -120,66 +121,54 @@ public class ExcelUtils {
|
||||
*/
|
||||
public <T extends BaseRowModel> void writeExcel(HttpServletResponse response, List<T> list,
|
||||
String fileName, String sheetName,
|
||||
Class<T> classType){
|
||||
writeExcel(response,list,fileName,sheetName,ExcelTypeEnum.XLSX,classType);
|
||||
Class<T> classType) {
|
||||
writeExcel(response, list, fileName, sheetName, ExcelTypeEnum.XLSX, classType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出 Excel :一个 sheet,带表头
|
||||
* 自定义WriterHandler 可以定制行列数据进行灵活化操作
|
||||
*
|
||||
* @param response HttpServletResponse
|
||||
* @param list 数据 list,每个元素为一个 BaseRowModel
|
||||
* @param fileName 导出的文件名
|
||||
* @param sheetName 导入文件的 sheet 名
|
||||
* @param response HttpServletResponse
|
||||
* @param list 数据 list,每个元素为一个 BaseRowModel
|
||||
* @param fileName 导出的文件名
|
||||
* @param sheetName 导入文件的 sheet 名
|
||||
* @param excelTypeEnum 导出Excel类型
|
||||
* @param classType 实体类映射,继承 BaseRowModel 类
|
||||
*
|
||||
* @param classType 实体类映射,继承 BaseRowModel 类
|
||||
*/
|
||||
@SneakyThrows
|
||||
public <T extends BaseRowModel> void writeExcel(HttpServletResponse response, List<T> list,
|
||||
String fileName, String sheetName, ExcelTypeEnum excelTypeEnum,
|
||||
Class<T> classType) {
|
||||
if (StrUtil.isBlank(sheetName)) {
|
||||
sheetName = DEFAULT_EXCEL_SHEET_NAME;
|
||||
}
|
||||
OutputStream outputStream =null;
|
||||
try {
|
||||
response.reset();
|
||||
outputStream = getOutputStream(fileName, response, excelTypeEnum);
|
||||
if (excelTypeEnum == ExcelTypeEnum.XLSX) {
|
||||
ExcelWriter writer = EasyExcelFactory.getWriterWithTempAndHandler(null, outputStream
|
||||
, excelTypeEnum, true, new PreWriterHandler<>(classType));
|
||||
Sheet sheet = new Sheet(1, 0, classType);
|
||||
sheet.setSheetName(sheetName);
|
||||
try {
|
||||
writer.write(list, sheet);
|
||||
} finally {
|
||||
writer.finish();
|
||||
}
|
||||
} else if (excelTypeEnum == ExcelTypeEnum.XLS) {
|
||||
// 其实也可以专门调03版的样式,或者直接套用
|
||||
ExcelWriterFactory writer = new ExcelWriterFactory(outputStream, excelTypeEnum);
|
||||
Sheet sheet = new Sheet(1, 0, classType);
|
||||
sheet.setSheetName(sheetName);
|
||||
try {
|
||||
writer.write(list, sheet);
|
||||
} finally {
|
||||
writer.finish();
|
||||
writer.close();
|
||||
}
|
||||
response.reset();
|
||||
@Cleanup
|
||||
OutputStream outputStream = getOutputStream(fileName, response, excelTypeEnum);
|
||||
if (excelTypeEnum == ExcelTypeEnum.XLSX) {
|
||||
ExcelWriter writer = EasyExcelFactory.getWriterWithTempAndHandler(null, outputStream
|
||||
, excelTypeEnum, true, new PreWriterHandler<>(classType));
|
||||
Sheet sheet = new Sheet(1, 0, classType);
|
||||
sheet.setSheetName(sheetName);
|
||||
try {
|
||||
writer.write(list, sheet);
|
||||
} finally {
|
||||
writer.finish();
|
||||
}
|
||||
outputStream.flush();
|
||||
}catch (IOException e){
|
||||
log.error("导出excel异常:{}",e);
|
||||
}finally {
|
||||
if(outputStream!=null){
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (excelTypeEnum == ExcelTypeEnum.XLS) {
|
||||
// 其实也可以专门调03版的样式,或者直接套用
|
||||
ExcelWriterFactory writer = new ExcelWriterFactory(outputStream, excelTypeEnum);
|
||||
Sheet sheet = new Sheet(1, 0, classType);
|
||||
sheet.setSheetName(sheetName);
|
||||
try {
|
||||
writer.write(list, sheet);
|
||||
} finally {
|
||||
writer.finish();
|
||||
writer.close();
|
||||
}
|
||||
}
|
||||
outputStream.flush();
|
||||
|
||||
}
|
||||
|
||||
@@ -204,16 +193,14 @@ public class ExcelUtils {
|
||||
/**
|
||||
* 导出文件时为Writer生成OutputStream
|
||||
*/
|
||||
@SneakyThrows
|
||||
private OutputStream getOutputStream(String fileName, HttpServletResponse response, ExcelTypeEnum excelTypeEnum) {
|
||||
try {
|
||||
String encodeFilename = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
|
||||
response.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE);
|
||||
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
||||
response.setHeader("Content-disposition", "attachment;filename="+ encodeFilename+excelTypeEnum.getValue());
|
||||
return response.getOutputStream();
|
||||
} catch (IOException e) {
|
||||
throw new ExcelException("创建文件失败!");
|
||||
}
|
||||
// 解决文件乱码问题
|
||||
String encodeFilename = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
|
||||
response.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE);
|
||||
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + encodeFilename + excelTypeEnum.getValue());
|
||||
return response.getOutputStream();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -222,6 +209,7 @@ public class ExcelUtils {
|
||||
* @param excel 需要解析的 Excel 文件
|
||||
* @param excelListener new ExcelListener()
|
||||
*/
|
||||
@SneakyThrows
|
||||
private ExcelReader getReader(MultipartFile excel,
|
||||
ExcelListener excelListener) {
|
||||
String fileName = excel.getOriginalFilename();
|
||||
@@ -231,14 +219,10 @@ public class ExcelUtils {
|
||||
if (!fileName.toLowerCase().endsWith(ExcelTypeEnum.XLS.getValue()) && !fileName.toLowerCase().endsWith(ExcelTypeEnum.XLSX.getValue())) {
|
||||
throw new ExcelException("文件格式错误!");
|
||||
}
|
||||
InputStream inputStream;
|
||||
try {
|
||||
inputStream = excel.getInputStream();
|
||||
return new ExcelReader(inputStream, null, excelListener, false);
|
||||
} catch (IOException e) {
|
||||
//do something
|
||||
}
|
||||
return null;
|
||||
@Cleanup
|
||||
InputStream inputStream= excel.getInputStream();
|
||||
return new ExcelReader(inputStream, null, excelListener, false);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user