springboot中EasyPoi實現(xiàn)自動新增序號的方法
方式一:
新增一個名為序號的列,設置導出格式為:isAddIndex
不要在ExportParams 中設置addIndex 為true 這個沒啥用
List<ExcelExportEntity> colList = new ArrayList<ExcelExportEntity>();
//自動新增首列序號
ExcelExportEntity xh = new ExcelExportEntity("序號", "xh");
xh.setFormat("isAddIndex");
colList.add(xh);
方式二:
第一步:重新定義一個ExcelExportUtil(easypoi 中的ExcelExportUtil是被final 修飾的)
如下圖所示: SubExcelExportService是我們繼承easypoi 的ExcelExportService 并重寫了insertDataToSheet()方法。
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
public class ExcelExportUtil {
public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<?> dataSet) {
Workbook workbook =getWorkbook(entity.getType(),dataSet.size());;
new SubExcelExportService().createSheetForMap(workbook, entity, entityList, dataSet);
return workbook;
}
public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {
Workbook workbook =getWorkbook(entity.getType(), dataSet.size());
new SubExcelExportService().createSheet(workbook, entity, pojoClass, dataSet);
return workbook;
}
private static Workbook getWorkbook(ExcelType type, int size) {
if (ExcelType.HSSF.equals(type)) {
return new HSSFWorkbook();
} else if (size < 100000) {
return new XSSFWorkbook();
} else {
return new SXSSFWorkbook();
}
}
public static void exportExcel(HttpServletResponse response, Workbook workbook) throws Exception {
response.reset();
response.setContentType("application/vnd.ms-excel");
String fileName = System.currentTimeMillis() + ".xlsx";
response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setCharacterEncoding("UTF-8");
OutputStream output = response.getOutputStream();
workbook.write(output);
workbook.close();
output.close();
}
}
第二步:繼承ExcelExportService 并重寫insertDataToSheet()方法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.export.ExcelExportService;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import cn.afterturn.easypoi.exception.excel.ExcelExportException;
import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil;
public class SubExcelExportService extends ExcelExportService {
private static intMAX_NUM= 60000;
@Override
protected void insertDataToSheet(Workbook workbook, ExportParams entity, List<ExcelExportEntity> entityList,
Collection<?> dataSet, Sheet sheet) {
try {
dataHandler = entity.getDataHandler();
if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) {
needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields());
}
dictHandler = entity.getDictHandler();
i18nHandler = entity.getI18nHandler();
// 創(chuàng)建表格樣式
setExcelExportStyler(
(IExcelExportStyler) entity.getStyle().getConstructor(Workbook.class).newInstance(workbook));
Drawing patriarch = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet);
List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
if (entity.isAddIndex()) {
excelParams.add(indexExcelEntity(entity));
}
excelParams.addAll(entityList);
int index = entity.isCreateHeadRows() ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
int titleHeight = index;
setCellWith(excelParams, sheet);
setColumnHidden(excelParams, sheet);
short rowHeight = entity.getHeight() != 0 ? entity.getHeight() : getRowHeight(excelParams);
setCurrentIndex(1);
Iterator<?> its = dataSet.iterator();
List<Object> tempList = new ArrayList<Object>();
while (its.hasNext()) {
Object t = its.next();
index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight, 0)[0];
tempList.add(t);
if (index >=MAX_NUM) {
break;
}
}
if (entity.getFreezeCol() != 0) {
sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0);
}
mergeCells(sheet, excelParams, titleHeight);
its = dataSet.iterator();
for (int i = 0, le = tempList.size(); i < le; i++) {
its.next();
its.remove();
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("List data more than max ,data size is {}", dataSet.size());
}
// 發(fā)現(xiàn)還有剩余l(xiāng)ist 繼續(xù)循環(huán)創(chuàng)建Sheet
if (dataSet.size() > 0) {
createSheetForMap(workbook, entity, entityList, dataSet);
} else {
// 創(chuàng)建合計信息
addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet);
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause());
}
}
第三步:設置導出文件的時候自動新增序號
ExportParams params = new ExportParams(); params.setAddIndex(true);
注意事項:ExcelExportUtil需要使用我們自己定義的(不要使用easyPoi的),ExcelExportUtil.exportExcel()中的 ExcelExportService 一定要使用我們自己定義的SubExcelExportService詳細參考上圖中的示例。
到此這篇關于springboot中EasyPoi實現(xiàn)自動新增序號的方法的文章就介紹到這了,更多相關springboot中EasyPoi自動新增序號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot中使用?POI的示例代碼
- SpringBoot EasyPoi動態(tài)導入導出的兩種方式實現(xiàn)方法詳解
- SpringBoot如何基于POI-tl和word模板導出龐大的Word文件
- SpringBoot集成POI實現(xiàn)Excel導入導出的示例詳解
- SpringBoot?AOP?@Pointcut切入點表達式排除某些類方式
- springboot?aop里的@Pointcut()的配置方式
- 淺談springboot之JoinPoint的getSignature方法
- SpringBoot中使用JeecgBoot的Autopoi導出Excel的方法步驟
- springboot中poi使用操作方法
相關文章
SpringBoot3實現(xiàn)webclient的通用方法詳解
Spring Boot WebClient 是 Spring Framework 5 中引入的一個新的響應式 Web 客戶端,用于異步和響應式地與外部服務進行通信,下面我們就來看看SpringBoot3實現(xiàn)webclient的通用方法吧2024-04-04
關于Spring源碼是如何解決Bean的循環(huán)依賴
這篇文章主要介紹了關于Spring源碼是如何解決Bean的循環(huán)依賴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java設計模式之備忘錄模式實現(xiàn)對象狀態(tài)的保存和恢復
本文介紹Java設計模式之備忘錄模式,該模式可以實現(xiàn)對象狀態(tài)的保存和恢復。通過詳細講解備忘錄模式的原理、實現(xiàn)方法和應用場景,幫助讀者深入理解該設計模式,并提供示例代碼和技巧,便于讀者實際應用2023-04-04
SpringBoot定時監(jiān)聽RocketMQ的NameServer問題及解決方案
這篇文章主要介紹了SpringBoot定時監(jiān)聽RocketMQ的NameServer問題及解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12

