反饋已提交

網絡繁忙

根據參數批量匯出多個檔案

一、概述

  1. 描述:實際業務場景中,可能會遇到需要從當前表篩選資料並分別匯出為多個檔案。

  2. 實現思路:參數面板中新增【按鈕元件】並新建點擊事件,用JS獲取【下拉複選框元件】選中的參數,點擊按鈕批量匯出當前表。

二、範例

1
資料準備。
  1. 建立普通報表,建立資料庫查詢,SQL 查詢語句為: SELECT * FROM 庫存 where 1=1 ${if(len(倉庫) == 0,"","and 倉庫 in ('" + 倉庫 + "')")}。【where 1=1】 表示條件永真,防止沒有參數條件時,【where】 後面沒有有效內容導致出錯。【len(倉庫)==0】 表示參數【倉庫】為空。【and 倉庫 in ('"+area+"')】中間的【倉庫】表示獲取的參數值,【+】 為字串連接符號。如下圖所示。

  2. 查詢語句表示:參數【倉庫】為空時,查詢語句相當於:SELECT * FROM 庫存 。

    當參數【倉庫】不為空時,查詢語句相當於:SELECT * FROM 庫存 WHERE 1=1 and 倉庫='${倉庫}' 。


image.png

 

2
報表設計。
  1. 具體樣式設定如下圖1所示,也可到文末下載範本。

  2. 倉庫資料欄所在的 A5 儲存格新增過濾條件,右擊【編輯】→【過濾】,根據參數展示資料,條件之間用【AND】連結,如下圖2所示。具體公式如下表所示。

 

可選欄

操作符

公式

倉庫

包含於

if(len(倉庫) == 0, nofilter, $倉庫)

日期

大於或等於

if(len(期初) == 0, nofilter, $期初)

日期

小於或等於

if(len(期末) == 0, nofilter, $期末)

 

1639117334530386.png

 

image (2).png

 

3
元件設定。
  1. 編輯參數介面,將參數【全部新增】進參數面板。如下圖1所示。

  2. 設定【期初】和【期末】參數元件型別為【日期元件】,並將【期初】的日期設定為【2010/02/01】、【期末】的日期設定為【2010/07/30】,如下圖2、圖3所示。

  3. 設定【倉庫】參數為【下拉複選框元件】,設定元件【資料字典】為資料庫 【FRDemoTW】 中【庫存】表,實際值與顯示值均為【倉庫】欄。返回值型別選擇【字串】,分隔符手動輸入【','】,如下圖4、圖5所示。

  4. 將查詢按鈕名稱修改為【生成庫存臺賬】。拖曳入按鈕元件,修改名稱為【批量匯出】。調整元件位置,最後介面如下圖6所示。

注:【','】的英文單引號不能少。


image (3).png

 

image (4).png

 

image (5).png

 

image (6).png

 

image (7).png

 

1639117621640919.png

 

4
新增點擊事件。
  1. 選中【批量匯出】按鈕 → 新增點擊事件 → 輸入 JavaScript 代碼如下,如下圖所示。

注1:將代碼中 【&format=excel】 中 【excel】 修改為 【word】、【pdf】 即可以匯出對應格式檔案。

注2:範例代碼中匯出的範本路徑為默認的reportlets,其他範本路徑需要在代碼window.open(URL)的URL部分拼接為對應的路徑。

 

1639117778636664.png


function ForTime(oldTime) {
Date.prototype.format = function(fmt) {
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S": this.getMilliseconds()
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
}
var oldTime = (new Date(oldTime)).getTime();
var curTime = new Date(oldTime).format("yyyy-MM-dd");
return curTime;
}

var url = '根據參數批量導出多個文件.cpt';
var name = this.options.form.getWidgetByName("倉庫").getValue();
var qc = this.options.form.getWidgetByName("期初").getValue();
var qm = this.options.form.getWidgetByName("期末").getValue();

var arr = name.split("','");

for (var i = 0; i < arr.length; i++) {
var pars = '&format=excel&extype=sheet&__filename__=' + arr[i];
window.open("${servletURL}?viewlet=" + encodeURI(url + pars) + "&倉庫=" + encodeURI(arr[i]) + "&期初=" + encodeURI(ForTime(qc)) + "&期末=" + encodeURI(ForTime(qm)), "_blank");
}


5
效果預覽。
  1. 儲存報表,為了避免分頁效果,我們點擊【資料分析】預覽,效果下圖所示。

注1:如果發現只能匯出一個 Excel 的話,在確認代碼無誤的情況下,需要把瀏覽器的禁止彈窗設為允許。

注2:不支援 IE 瀏覽器。不支援行動端。

 

1.gif

 

三、範本下載

附件列表


主題: 報表專題
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙