很多人在開發報表的時候會遇到将多張表樣相同的excel導入到模闆,然後送出至資料庫中。但問題是很多情況,線上導入不支援一次性選擇多個excel,一次隻能選擇一個excel,也不能将多個excel中的資料在不送出入庫的前提下導入到模闆中,即如果在導入excel之前,web頁面裡面有資料,導入excel之後會覆寫之前的資料。
那這樣的問題是不是無法解決呢?
解決的思路是利用FineReport自定義一個excel導入按鈕,在點選該按鈕的時候将上一次導入到模闆中的資料進行送出,同時重新整理頁面,讓頁面恢複到原始的空白狀态,并實作excel導入操作,然後再點選導入按鈕,導入下一個excel,以此類推,這樣在操作上就會簡單很多。
比如将下面2張表樣相同的excel導入到FineReport模闆中:

1.修改其表樣,使其與excel中的标題名保持一緻,如下圖:
2.報表填報屬性修改
修改報表填報屬性中列和資料庫中列的對應,這裡隻需要修改類别ID對應的值,修改為map(C2, "ds2", 2, 1)。
3.自定義導入按鈕
點選模闆>模闆web屬性>填報頁面設定,輕按兩下工具欄中的自定義按鈕,将該按鈕添加到頂部工具欄中,同時删除内置的導入Excel按鈕和送出按鈕,如下圖:
4.自定義事件編寫
在解決思路中描述了自定義按鈕需要執行的操作為:在點選按鈕的時候将上一次導入到模闆中的資料進行送出,同時重新整理頁面,讓頁面恢複到原始的空白狀态,并實作excel導入操作。
在工具欄編輯界面,選中自定義按鈕,點選自定義事件,如下圖:
在JavaScript腳本中寫下js語句,如下圖:
<code>var</code> <code>value=contentPane.getCellValue(0,1,2); </code>
<code>if</code> <code>(value!=</code><code>""</code><code>) { </code>
<code> </code><code>FR.Msg.confirm(</code><code>"提示"</code><code>, </code><code>"是否送出上一次導入資料"</code><code>, </code><code>function</code><code>(result){ </code>
<code> </code><code>if</code><code>(result){ </code>
<code> </code><code>_g(</code><code>'${sessionID}'</code><code>).writeReport(); </code>
<code> </code><code>contentPane.refreshAllSheets(); </code>
<code> </code><code>contentPane.importExcel(); </code>
<code> </code><code>} </code>
<code> </code><code>}); </code>
<code>} </code>
<code>else</code><code>{ </code>
<code> </code><code>contentPane.importExcel(); </code>
<code> </code><code>}</code>
點選填報預覽,點選導入Excel這個自定義按鈕,選擇第一個需要導入的Excel,然後再點選第二個需要導入的Excel,頁面會提示是否送出上一次導入資料,點選确定,則會将上一次導入資料送出至資料庫,然後再彈出檔案選擇框,這時就可以選擇第二個Excel,以此類推。
要提醒的是,在利用此工具填報報表線上多次導入Excel時隻支援空白模闆的導入,即填報模闆中不能有原始資料存在;線上多次導入Excel支援各種樣式的填報報表,不僅僅局限于行式填報報表,但是如果是非行式填報報表,報表的控件位置需要與Excel中的資料位置保持一緻,行式填報報表則需要保持标題名一緻。
本文轉自 雄霸天下啦 51CTO部落格,原文連結:http://blog.51cto.com/10549520/1783803,如需轉載請自行聯系原作者