很多人在開發(fā)報(bào)表的時(shí)候會(huì)遇到將多張表樣相同的excel導(dǎo)入到模板,然后提交至數(shù)據(jù)庫(kù)中。但問題是很多情況,在線導(dǎo)入不支持一次性選擇多個(gè)excel,一次只能選擇一個(gè)excel,也不能將多個(gè)excel中的數(shù)據(jù)在不提交入庫(kù)的前提下導(dǎo)入到模板中,即如果在導(dǎo)入excel之前,web頁(yè)面里面有數(shù)據(jù),導(dǎo)入excel之后會(huì)覆蓋之前的數(shù)據(jù)。
那這樣的問題是不是無法解決呢?
解決的思路是利用FineReport自定義一個(gè)excel導(dǎo)入按鈕,在點(diǎn)擊該按鈕的時(shí)候?qū)⑸弦淮螌?dǎo)入到模板中的數(shù)據(jù)進(jìn)行提交,同時(shí)刷新頁(yè)面,讓頁(yè)面恢復(fù)到原始的空白狀態(tài),并實(shí)現(xiàn)excel導(dǎo)入操作,然后再點(diǎn)擊導(dǎo)入按鈕,導(dǎo)入下一個(gè)excel,以此類推,這樣在操作上就會(huì)簡(jiǎn)單很多。
比如將下面2張表樣相同的excel導(dǎo)入到FineReport模板中:

1.修改其表樣,使其與excel中的標(biāo)題名保持一致,如下圖:

2.報(bào)表填報(bào)屬性修改
修改報(bào)表填報(bào)屬性中列和數(shù)據(jù)庫(kù)中列的對(duì)應(yīng),這里只需要修改類別ID對(duì)應(yīng)的值,修改為map(C2, "ds2", 2, 1)。
3.自定義導(dǎo)入按鈕
點(diǎn)擊模板>模板web屬性>填報(bào)頁(yè)面設(shè)置,雙擊工具欄中的自定義按鈕,將該按鈕添加到頂部工具欄中,同時(shí)刪除內(nèi)置的導(dǎo)入Excel按鈕和提交按鈕,如下圖:

4.自定義事件編寫
在解決思路中描述了自定義按鈕需要執(zhí)行的操作為:在點(diǎn)擊按鈕的時(shí)候?qū)⑸弦淮螌?dǎo)入到模板中的數(shù)據(jù)進(jìn)行提交,同時(shí)刷新頁(yè)面,讓頁(yè)面恢復(fù)到原始的空白狀態(tài),并實(shí)現(xiàn)excel導(dǎo)入操作。
在工具欄編輯界面,選中自定義按鈕,點(diǎn)擊自定義事件,如下圖:

在JavaScript腳本中寫下js語(yǔ)句,如下圖:

var value=contentPane.getCellValue(0,1,2);
if (value!="") {
FR.Msg.confirm("提示", "是否提交上一次導(dǎo)入數(shù)據(jù)", function(result){
if(result){
_g('${sessionID}').writeReport();
contentPane.refreshAllSheets();
contentPane.importExcel();
}
});
}
else{
contentPane.importExcel();
}
點(diǎn)擊填報(bào)預(yù)覽,點(diǎn)擊導(dǎo)入Excel這個(gè)自定義按鈕,選擇第一個(gè)需要導(dǎo)入的Excel,然后再點(diǎn)擊第二個(gè)需要導(dǎo)入的Excel,頁(yè)面會(huì)提示是否提交上一次導(dǎo)入數(shù)據(jù),點(diǎn)擊確定,則會(huì)將上一次導(dǎo)入數(shù)據(jù)提交至數(shù)據(jù)庫(kù),然后再?gòu)棾鑫募x擇框,這時(shí)就可以選擇第二個(gè)Excel,以此類推。
要提醒的是,在利用此工具填報(bào)報(bào)表在線多次導(dǎo)入Excel時(shí)只支持空白模板的導(dǎo)入,即填報(bào)模板中不能有原始數(shù)據(jù)存在;在線多次導(dǎo)入Excel支持各種樣式的填報(bào)報(bào)表,不僅僅局限于行式填報(bào)報(bào)表,但是如果是非行式填報(bào)報(bào)表,報(bào)表的控件位置需要與Excel中的數(shù)據(jù)位置保持一致,行式填報(bào)報(bào)表則需要保持標(biāo)題名一致。