1. 概述
1.1 版本
報表服務器版本 | JAR 包 | 功能變更 |
---|---|---|
10.0 | - | - |
10.0.12 | 2020-12-28 | 填報預覽與新填報預覽一樣,支持多次導入 Excel,且無空白模板(即填報模板中不能有數據)的限制 |
1.2 問題描述
在填報預覽或新填報預覽方式下,希望将多個表樣相同的 Excel 分批次導入填報頁面,然後一次性提交。
「自由格式」和「固定行式」的報表導入 Excel 時執行的是按位置匹配邏輯,多次導入的時候基本能滿足用戶要求。
而「不定行式」的報表,因爲行可以擴展,所以在連續多次導入 Excel 時,如果 Excel 數據行數大於等於頁面已有數據,則執行「全量導入」,會覆蓋掉模板原始數據;而如果 Excel 數據行數少於模板原始數據,會執行「插入導入」。
用戶希望在這兩種不同情況下,能選擇是插入導入或覆蓋導入。
1.3 解決思路
針對不定行式填報表,提供統一的多次導入 Excel 計算邏輯,如下所示:
1)覆蓋導入(不清空已有數據)
每次導入 Excel 時,無論 Excel 中的行數是多於還是少於填報頁面,均執行覆蓋導入。如果 Excel 數據少於填報頁面已有數據,則填報頁面多出來的數據在 Excel 導入後保留。
2)清空導入(清空已有數據)
每次導入時均清空填報頁面已有數據,無論頁面數據是多於還是少於Excel,最後只保留Excel中的内容。
注:清空導入只清空不定行區域受Excel影響的内容,其他内容不作清空。
如下圖所示,Excel 裏存的是是 A~E 列的明細内容,清空導入時,F3 格子内容不清空。
3)增量導入:
每次導入 Excel 時,無論 Excel 中的行數是多於還是少於填報頁面,均執行增量導入,在結尾行擴充導入的 Excel 内容。
2. 示例一:内置按鈕實現
2.1 Excel數據準備
1)點擊下載 Excel 文件:Excel模板一.xlsx
2)點擊下載 Excel 文件:Excel模板二.xlsx
2.2 模板準備
如下圖設計表格,A2~J2 單元格添加文本控件。
注:若文本控件所在單元格中插入了數據列,需要将數據設置改爲列表,如下圖所示:
2.3 添加多次導入按鈕
設計器菜單欄點擊「模板>模板 Web 屬性」,如下圖步驟将「多次導入 Excel」按鈕添加到工具欄中,如下圖所示:
2.4 效果預覽
保存報表,點擊「填報預覽」或「新填報預覽」,Web 端工具欄「多次導入 Excel 」按鈕下拉顯示 4 種 Excel 導入方式。
4 種導入方式的效果如下圖所示:
3. 示例二:JS事件實現
使用 JS 事件也可以實現覆蓋導入、清空導入和增量導入,方法如下:
3.1 覆蓋導入
1)沿用示例一的模板,選中 A6 單元格,如下圖步驟給單元格添加一個按鈕控件,按鈕名字爲覆蓋導入。
2)如下圖步驟給該按鈕添加一個點擊事件,JS 代碼如下:
contentPane.importExcel_Cover();
3.2 清空導入
1)在上面的基礎上,選中 C6 單元格,如下圖步驟給單元格添加一個按鈕控件,按鈕名字爲清空導入。
2)如下圖步驟給該按鈕添加一個點擊事件,JS 代碼如下:
contentPane.importExcel_Clean();
3.3 增量導入
1)在上面的基礎上,選中 E6 單元格,如下圖步驟給單元格添加一個按鈕控件,按鈕名字爲增量導入。
2)如下圖步驟給該按鈕添加一個點擊事件,JS 代碼如下:
contentPane.importExcel_Append();
3.4 效果預覽
保存報表,點擊「填報預覽」或「新填報預覽」,三種按鈕的導入效果如下圖所示:
4. 模板下載
已完成模板參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExcelImport\填報多次導入Excel.cpt
點擊下載模板:填報多次導入Excel.cpt
點擊下載 Excel 數據文件:Excel模板一.xlsx Excel模板二.xlsx
5. 注意事項
FineReport 填報報表在線多次導入 Excel 支持各種樣式的填報報表,不僅僅局限於行式填報報表,但是如果是非行式填報報表,報表的控件位置需要與 Excel 中的數據位置保持一緻,行式填報報表則需要保持标題名一緻。