功能介紹
bdf2-import模塊主要提供excel導(dǎo)入功能,可以將存放于Excel當(dāng)中的數(shù)據(jù)批量導(dǎo)出到數(shù)據(jù)庫(或者其它存儲介質(zhì))。在某些項目當(dāng)中,項目開發(fā)完成之后,接下來可能會面對大量基礎(chǔ)數(shù)據(jù)錄入的問題,而這些基礎(chǔ)數(shù)據(jù)可能多數(shù)都以Excel形式存在。對于這種情況,我們可以利用BDF2當(dāng)中提供的Excel數(shù)據(jù)導(dǎo)入功能,通過簡單的模型定義,在不寫一行代碼的情況下,就可以將位于Excel中的數(shù)據(jù)導(dǎo)入到我們的數(shù)據(jù)庫當(dāng)中,從頁實現(xiàn)大量、多種類型的基于Excel的基礎(chǔ)數(shù)據(jù)的錄入工作,bdf2-import功能模塊具有以下特點:
- 提供可視化的Excel導(dǎo)入配置界面,可以在線對Excel文件數(shù)據(jù)進行預(yù)覽、數(shù)據(jù)合法性效驗、解析導(dǎo)入數(shù)據(jù)庫;
- 可以同時支持Microsoft-Excel 97-2003(.xls)和Microsoft-Excel 2007+(.xlsx);
- 通過實現(xiàn)指定的接口,可以對導(dǎo)入Excel數(shù)據(jù)進行自定義處理;
環(huán)境配置
要使用 bdf2-import模塊,我們可以到nexus.bsdn.org上下載最新的bdf2-import模塊的jar,或者可以到我們提供的在線創(chuàng)建項目向?qū)е羞x擇bdf2-import模塊并下載即可;同樣,如果您采用的是Maven來管理項目,那么只需要將bdf2-import模塊的依賴信息加到我們的pom.xml當(dāng)中即可:
bdf2-import模塊所需要的依賴
<dependency>
<groupId>com.bstek.bdf2</groupId>
<artifactId> bdf2-import</artifactId>
<version>2.0.0</version>
</dependency>
在bdf2-import模塊當(dāng)中,提供了提供可視化的Excel導(dǎo)入配置界面,所以,如果您在使用bdf2-import模塊時,也同時使用了bdf2-core模塊,那么可以在登錄之后訪問generate.system.menu.action這個用于初始化菜單的URL,創(chuàng)建好的導(dǎo)航菜單如下圖所示:

導(dǎo)入模板定義
打開"導(dǎo)入模板定義"頁面,添加一個導(dǎo)入方案,如下圖所示。

點擊【添加】按鈕,定義導(dǎo)入模板,如下圖所示。

這里的需求注意的是導(dǎo)入模板的方案的ID,這個ID首先需要唯一,然后盡量定義的有意義,因為我們后面在具體調(diào)用時要使用這個ID,其次需要注意的是如果導(dǎo)入數(shù)據(jù)的處理不采用“系統(tǒng)默認(rèn)處理類”,而使用“自定義處理類”,那么我們寫一個實現(xiàn)com.bstek.bdf2.importexcel.processor.IExcelProcessor接口的自定義類,并配置到spring環(huán)境當(dāng)中,接口IExcelProcessor定義如下:
IExcelProcessor接口
package com.bstek.bdf2.importexcel.processor;
import com.bstek.bdf2.importexcel.model.ExcelDataWrapper;
/**
* 要導(dǎo)入的Excel內(nèi)容的處理類接口,如果自定義處理類,需要實現(xiàn)此接口
*
* @author matt.yao@bstek.com
* @since 2.0
*/
public interface IExcelProcessor {
public String getName();
/**
* 執(zhí)行處理Excel內(nèi)容的方法
*
* @param excelDataWrapper
* 一個包裝了Excel信息的集合
* @return 導(dǎo)入處理成功返回的記錄數(shù)
* @throws Exception
*/
public int execute(ExcelDataWrapper excelDataWrapper) throws Exception;
}
定義完方案之后,就可以為該定義信息添加具體與Excel對應(yīng)的列信息了,如下圖所示。

同樣在定義列信息時,對于列中數(shù)據(jù)的處理,還允許用戶添加處理攔截類,這個攔截類的作用可以對導(dǎo)入的數(shù)據(jù)進行格式化(比如excel里定義的性別為男、女,存儲到數(shù)據(jù)庫中應(yīng)該變?yōu)?和0等),或合法性驗證(長度是否符合要求,是否為空等)。系統(tǒng)默認(rèn)提供了三種攔截類,如下圖所示:

如果需要自定義攔截類,那么只需要定義一個類實現(xiàn)com.bstek.bdf2.importexcel.interceptor.ICellDataInterceptor接口,并配置到spring環(huán)境即可,例如系統(tǒng)中格式化性別的攔截類定義如下:
FormatGenderInterceptor
package com.bstek.bdf2.importexcel.interceptor.impl;
import org.springframework.stereotype.Service;
@Service("bdf2.formatGenderInterceptor")
public class FormatGenderInterceptor extends RequiredInterceptor {
public Object execute(Object cellValue) throws Exception {
super.execute(cellValue);
if ("男".equals(cellValue)) {
return "Y";
} else {
return "N";
}
}
public String getName() {
return "格式化性別[男=Y,女=N]";
}
}
調(diào)用導(dǎo)入模板
定義好導(dǎo)入模板后,我們就可以在應(yīng)用需要的地方調(diào)用這些定義好的excel模板,快速實現(xiàn)將Excel中的數(shù)據(jù)上傳并導(dǎo)入到服務(wù)端。由于bdf2-import調(diào)用導(dǎo)入模板采用Dorado7組件方式實現(xiàn),那么在創(chuàng)建配置完成項目后,需要啟動項目工程更新Dorado7配置規(guī)則(在線更新),更新完Dorado7配置規(guī)則后,打開Dorado View文件,可以看到在Dorado7工具欄新添加了一個組件ImportExcelAction。如下圖所示:

ImportExcelAction控件提供若干關(guān)鍵屬性,如下表所示:
屬性名 | 類型 | 默認(rèn)值 | 描述 |
excelModelId | String | 空 | 定義導(dǎo)入模板時指定的方案編號 |
startRow | int | 空 | excel的開始行,如果不指定默認(rèn)值,默認(rèn)第一行開始解析 |
endRow | int | 空 | excel的結(jié)束行,如果不指定默認(rèn)值,系統(tǒng)自動判斷excel的結(jié)束行 |
showImportData | boolean | true | 是否在線預(yù)覽導(dǎo)入的數(shù)據(jù),默認(rèn)true |
bigData | boolean | false | 如果數(shù)據(jù)量比較大,可以設(shè)置為true,解析的excel單元格值類型為字符串 |
在view中添加一個ImportExcelAction控件,設(shè)置對應(yīng)的模板方案編號,調(diào)用示例代碼如下:
var importExcelAction=view.get("#importExcelActionDemo");
importExcelAction.set("excelModelId","0001");
importExcelAction.execute(function(arg){
dorado.MessageBox.alert("成功解析導(dǎo)入[" + arg + "]數(shù)據(jù)!");
})
整個調(diào)用界面效果如下面幾張圖所示:



更多建議: