15.BDF2-IMPORT

2023-07-03 17:37 更新

功能介紹

bdf2-import模塊主要提供excel導(dǎo)入功能,可以將存放于Excel當(dāng)中的數(shù)據(jù)批量導(dǎo)出到數(shù)據(jù)庫(kù)(或者其它存儲(chǔ)介質(zhì))。在某些項(xiàng)目當(dāng)中,項(xiàng)目開(kāi)發(fā)完成之后,接下來(lái)可能會(huì)面對(duì)大量基礎(chǔ)數(shù)據(jù)錄入的問(wèn)題,而這些基礎(chǔ)數(shù)據(jù)可能多數(shù)都以Excel形式存在。對(duì)于這種情況,我們可以利用BDF2當(dāng)中提供的Excel數(shù)據(jù)導(dǎo)入功能,通過(guò)簡(jiǎn)單的模型定義,在不寫(xiě)一行代碼的情況下,就可以將位于Excel中的數(shù)據(jù)導(dǎo)入到我們的數(shù)據(jù)庫(kù)當(dāng)中,從頁(yè)實(shí)現(xiàn)大量、多種類(lèi)型的基于Excel的基礎(chǔ)數(shù)據(jù)的錄入工作,bdf2-import功能模塊具有以下特點(diǎn):
  • 提供可視化的Excel導(dǎo)入配置界面,可以在線對(duì)Excel文件數(shù)據(jù)進(jìn)行預(yù)覽、數(shù)據(jù)合法性效驗(yàn)、解析導(dǎo)入數(shù)據(jù)庫(kù);
  • 可以同時(shí)支持Microsoft-Excel 97-2003(.xls)和Microsoft-Excel 2007+(.xlsx);
  • 通過(guò)實(shí)現(xiàn)指定的接口,可以對(duì)導(dǎo)入Excel數(shù)據(jù)進(jìn)行自定義處理;

環(huán)境配置

要使用 bdf2-import模塊,我們可以到nexus.bsdn.org上下載最新的bdf2-import模塊的jar,或者可以到我們提供的在線創(chuàng)建項(xiàng)目向?qū)е羞x擇bdf2-import模塊并下載即可;同樣,如果您采用的是Maven來(lái)管理項(xiàng)目,那么只需要將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模塊時(shí),也同時(shí)使用了bdf2-core模塊,那么可以在登錄之后訪問(wèn)generate.system.menu.action這個(gè)用于初始化菜單的URL,創(chuàng)建好的導(dǎo)航菜單如下圖所示:

導(dǎo)入模板定義

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

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

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

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

如果需要自定義攔截類(lèi),那么只需要定義一個(gè)類(lèi)實(shí)現(xiàn)com.bstek.bdf2.importexcel.interceptor.ICellDataInterceptor接口,并配置到spring環(huán)境即可,例如系統(tǒng)中格式化性別的攔截類(lèi)定義如下:
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模板,快速實(shí)現(xiàn)將Excel中的數(shù)據(jù)上傳并導(dǎo)入到服務(wù)端。由于bdf2-import調(diào)用導(dǎo)入模板采用Dorado7組件方式實(shí)現(xiàn),那么在創(chuàng)建配置完成項(xiàng)目后,需要啟動(dòng)項(xiàng)目工程更新Dorado7配置規(guī)則(在線更新),更新完Dorado7配置規(guī)則后,打開(kāi)Dorado View文件,可以看到在Dorado7工具欄新添加了一個(gè)組件ImportExcelAction。如下圖所示:

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)