幾行代碼就能實(shí)現(xiàn)復(fù)雜的 Excel 導(dǎo)入導(dǎo)出,這個(gè)工具類真心強(qiáng)大!
功能介紹
IMPORT
ExcelHandle核心處理器
ExcelWorkbookManageexcel所有工作表管理
ExcelInitConfig配置文件初始化
AbstractFileParser文件轉(zhuǎn)換類alanpoi import有何優(yōu)勢(shì)?
用戶不需要額外引入poi等繁瑣的jar
毫秒級(jí)解析大文件,支持一鍵解析多sheet頁(yè)簽,不需要自己按照一定的格式循環(huán)匹配解析所有數(shù)據(jù)
不管你的系統(tǒng)多么復(fù)雜,有多少個(gè)導(dǎo)入,
alanpoi全部支持,而且準(zhǔn)確返回你需要的對(duì)象,減輕開(kāi)發(fā)者工作量目前外界業(yè)務(wù)越來(lái)越復(fù)雜,對(duì)各個(gè)功能要求也越來(lái)越嚴(yán)格,當(dāng)然導(dǎo)入也不例外,alanpoi支持錯(cuò)誤一鍵回寫到excel,對(duì)應(yīng)到每一行
alanpoi靈活可擴(kuò)展,提供了ExcelConsumeInterface接口,可繼承它,實(shí)現(xiàn)valid、error、end三個(gè)方法編寫自己的業(yè)務(wù)
valid: 方法參數(shù)返回excel所有數(shù)據(jù),用戶可進(jìn)行自我校驗(yàn)
error: 導(dǎo)入錯(cuò)誤會(huì)回調(diào)
end: 方法參數(shù)返回校驗(yàn)成功的數(shù)據(jù),valid校驗(yàn)失敗的數(shù)據(jù)不會(huì)返回,用戶可以自己操作持久化或者其他業(yè)務(wù)
怎么使用alanpoi實(shí)現(xiàn)導(dǎo)入
項(xiàng)目中使用:
<dependency>
<groupId>com.alanpoi</groupId>
<artifactId>alanpoi-analysis</artifactId>
<version>1.3.0</version>
</dependency>簡(jiǎn)單一句話:一配置一繼承一調(diào)用
一配置
在項(xiàng)目resources目錄中新建
excel-config.xml文件,cosume中配置自己的消費(fèi)類路徑,繼承ExcelConsumeInterface接口,sheet中的vo是把當(dāng)前sheet序列化的對(duì)象路徑,column中當(dāng)然就是配置vo中的屬性了。其中name可選字段,填了就是按照這個(gè)匹配excel列名,不填就是按照offset順序;導(dǎo)入包含多個(gè)sheet就配置多個(gè)
<?xml version = "1.0" encoding = "GB2312"?>
<exg name="excelId" version="1.0" file-type="excel">
<excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">
<sheet index="0" row-start="1" column-start="0"
vo="com.xxx.vo.FinAccountImportVO">
<column name="公司/供應(yīng)商編號(hào)" offset="1">companyCode</column>
<column name="公司/供應(yīng)商名稱" offset="2">companyName</column>
<column name="銀行賬號(hào)" offset="3">bankAccount</column>
<column name="開(kāi)戶銀行" offset="4">bankName</column>
</sheet>
</excel>
</exg>一繼承
consume類繼承ExcelConsumeInterface接口,實(shí)現(xiàn)方法/**
* when error will 調(diào)用
*
* @param excelError
*/
void error(ExcelError excelError);
/**
* custom valid data
*
* @param workbookId
* @param sheetDataList
*/
void validData(String workbookId, List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);
/**
* @param sheetDataList return success data
*/
void end(List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);一調(diào)用
用戶調(diào)用
ExcelExportUtil類的customImportData即可,參數(shù)excelId就是excel-conifg.xml中配置的idExport
描敘
能夠用一行代碼實(shí)現(xiàn)絕不用第二行,如果一行不行,那就再加一行!
模式
注解模式導(dǎo)出:
ExcelSheet注解: 用于導(dǎo)入類上,可制定sheet名,列頭的顏色、字體、高度、寬度
ExcelColum注解: 用于導(dǎo)入類的屬性上,可指定列頭的名稱,單元格的樣式
DateFormat注解: 用于導(dǎo)入類的屬性上, 可以按照指定格式輸出到excel,默認(rèn)"
yyyy/MM/dd"NumFormat注解: 用于導(dǎo)入類的屬性上,可以按照指定格式輸出到excel,默認(rèn)"
00.00"樣例:
@ExcelSheet(name = "測(cè)試", backColor = AlanColors.GREEN, font = "宋體", fontSize = 25)
@Data
public class ExportVO {
@ExcelColumn(name = "名稱", width = 32, link = "${url}")
private String name;
@ExcelColumn(name = "值")
private String value;
@ExcelColumn(name = "金額")
@NumFormat(value = "0000.00##")
private BigDecimal amount;
@ExcelColumn(name = "時(shí)間格式化")
@DateFormat(value = "yyyy-MM-dd hh:mm:ss")
private Date dateTime;
@DateFormat
@ExcelColumn(name = "日期格式化")
private java.sql.Date date;
@ExcelColumn(isExist = false)
private String url;
}使用
方式一. 直接導(dǎo)出到瀏覽器
ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);
方式二. 調(diào)用
getWorkbook獲取工作表,自行處理workbookExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)
高級(jí)使用
示例一:導(dǎo)出指定列(動(dòng)態(tài)導(dǎo)出列)
List<ExportVO> list = new ArrayList<>();
for (int i = 0; i < 500; i++) {
ExportVO exportVO = new ExportVO();
exportVO.setName("name" + i);
exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
exportVO.setDate(new Date(132324343 + i * 100));
exportVO.setDateTime(new java.util.Date());
list.add(exportVO);
}
List<String> colList = new ArrayList<>();
//按照順序僅導(dǎo)出add的列
colList.add("name");
colList.add("value");
//調(diào)用獲取workbook對(duì)象;也可以直接調(diào)用exportSpecifyCol方法導(dǎo)出到瀏覽器
Workbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.class, colList);示例二:多sheet頁(yè)簽導(dǎo)出
List<ExportVO> list = new ArrayList<>();
List<Export2VO> list2 = new ArrayList<>();
for (int i = 0; i < 500; i++) {
ExportVO exportVO = new ExportVO();
exportVO.setName("name" + i);
exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
exportVO.setDate(new Date(132324343 + i * 100));
exportVO.setDateTime(new java.util.Date());
list.add(exportVO);
Export2VO export2VO = new Export2VO();
export2VO.setName("name" + i);
export2VO.setValue("value" + i);
export2VO.setAmount(new BigDecimal(6666.666 + i * 10));
export2VO.setDate(new Date(132324343 + i * 100));
export2VO.setDateTime(new java.util.Date());
list2.add(export2VO);
}
Map<Class<?>, Collection<?>> map = new HashMap<>();
map.put(ExportVO.class, list);
map.put(Export2VO.class, list2);
//調(diào)用獲取workbook對(duì)象;也可以直接調(diào)用exportByMultiSheet方法導(dǎo)出到瀏覽器
Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);代碼已經(jīng)開(kāi)源,地址:
https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis
來(lái)源:blog.csdn.net/weixin_43225813/article/details/108995011
精彩推薦:
18 款低代碼平臺(tái)!開(kāi)發(fā)解放雙手!
你敢信?開(kāi)發(fā)一個(gè)管理系統(tǒng)我只用了兩天
isEmpty 和 isBlank 的用法區(qū)別,至少一半的人答不上來(lái)...
