SAP BPS: 用Javascript實現資料下載
SAP BPS: 用Javascript實現資料下載
Robin Lei
BPS的上傳和下載實在不怎麼樣,都要寫BSP去實現,上傳沒有辦法,雖然我也曾想過用SAP的複製的方法,不過不是很容易控制,就放棄了,選擇了網上傳播的BPS上傳的方法。
而預算本身的資料量不是很大,所以顯示1000行應該不是太大問題。 而正是這一點,我又想起了JS的頁面拷貝複製。
(之前的程式碼可以參照以前的帖子)
目前碰到一個問題是, BPS 的Layout(就是格式)定義,會自動套用合併同值行,即上下行值相同會採用行合併。 這樣使用者如果把資料匯出,顯示的就是Excel裡面的合併單元格, 這可是大大不行。 於是我又加入了以前為了Xcelsisu而寫的程式碼,即將COLSPAN和ROWSPAN的資料恢復回完整的狀態,這一點多虧自己以前把程式碼保持下來,複製黏貼就可以了。
我們知道最終Web顯示的Layout是一個Table,而這個table的名字就是Layout的名字加字尾‘-table’, 掌握這些規律後,整個過程就迎刃有餘了。 當然,最後還加了了 列剔除的程式碼。 這也是針對一些特殊情況下的設計。
實現程式碼如下,(當然這裡用到了偉大的jQuery)
1. 實現表格還原
$(document).ready(function(){
var i,j
var col, row,cols,cols_old,rows,len,lp
var text
col = 0
row = 0
//刪除BPS Layout特定的CSS class
$("#LAYOUT_DOWNLOAD-table").removeClass("SAPBEXCellspacing");
//初始化裝載行內容的陣列
len = $("#LAYOUT_DOWNLOAD-table").find("tr").length;
var arr = new Array(len);
var flag = new Array(len);
var index
var findex
var arr = new Array(len);
var flag = new Array(len);
var index
var findex
for(lp = 0 ; lp < len ; lp++){
arr[lp] = new Array();
flag[lp] = new Array();
}
arr[lp] = new Array();
flag[lp] = new Array();
}
//對Layout表格進行迴圈
$("#LAYOUT_DOWNLOAD-table").find("tr").each(function(i){
$(this).find("td").each(function(j){
cols = $(this).attr("colspan");
if("undefined" == typeof cols){
cols = 1
}
cols_old = cols;
rows = $(this).attr("rowspan");
if("undefined" == typeof rows){
rows = 1
}
text = $(this).text();
row = i
index = -1;
do{
index = index + 1
}while(flag[row][index] == 'F') ;
$(this).find("td").each(function(j){
cols = $(this).attr("colspan");
if("undefined" == typeof cols){
cols = 1
}
cols_old = cols;
rows = $(this).attr("rowspan");
if("undefined" == typeof rows){
rows = 1
}
text = $(this).text();
row = i
index = -1;
do{
index = index + 1
}while(flag[row][index] == 'F') ;
col = index
do
{
do
{
text = text.replace(/,/g,"");
arr[row][index] = text;
flag[row][index] = 'F'
cols = cols -1;
index = index + 1;
}while(cols > 0);
rows = rows - 1;
row = row + 1 ;
index = col ;
cols = cols_old
}while(rows > 0);
});
row = i;
index = 0;
var str = '';
//新增行
//刪除不需要的列;根據實際情況而定
do
{
if( index == 4){
{
do
{
text = text.replace(/,/g,"");
arr[row][index] = text;
flag[row][index] = 'F'
cols = cols -1;
index = index + 1;
}while(cols > 0);
rows = rows - 1;
row = row + 1 ;
index = col ;
cols = cols_old
}while(rows > 0);
});
row = i;
index = 0;
var str = '';
//新增行
//刪除不需要的列;根據實際情況而定
do
{
if( index == 4){
// 第四列因為不需要進行剔除。
}else{
str = str + "" + arr[row][index] + " ";
}
index = index + 1;
}while( index < arr[row].length);
$(this).html(str);
});
str = str + "
}
index = index + 1;
}while( index < arr[row].length);
$(this).html(str);
});
})
2. 內容複製函式
function bringtoexcel(){
var reg = new RegExp("]*>","ig");
var reg1 = new RegExp("","ig");
var reg2 = new RegExp(" var uttext = document.all('LAYOUT_DOWNLOAD-table').outerHTML;
// uttext = outtext.replace(reg,"");
// uttext = outtext.replace(reg1,"");
uttext = outtext.replace(reg2,"
window.clipboardData.setData("Text",outtext);
var ExApp = new ActiveXObject("Excel.Application")
var ExWBk = ExApp.workbooks.add()
var ExWSh = ExWBk.worksheets(1)
ExApp.DisplayAlerts = false
ExApp.visible = true
ExWBk.worksheets(1).Paste;
}
var reg = new RegExp("]*>","ig");
var reg1 = new RegExp("","ig");
var reg2 = new RegExp("
// uttext = outtext.replace(reg,"");
// uttext = outtext.replace(reg1,"");
uttext = outtext.replace(reg2,"
window.clipboardData.setData("Text",outtext);
var ExApp = new ActiveXObject("Excel.Application")
var ExWBk = ExApp.workbooks.add()
var ExWSh = ExWBk.worksheets(1)
ExApp.DisplayAlerts = false
ExApp.visible = true
ExWBk.worksheets(1).Paste;
}
3. 加入下載按鍵
以上測試通過,使用OK。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-705840/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
相關文章
- SAP BPS : Exit Function 實現版本鎖定Function
- SAP BPS:Web 許可權實現新思路Web
- SAP BPS 變數出口變數
- SAP BPS: 物件的傳輸物件
- SAP BPS : 一變數多特徵變數特徵
- SAP BPS 巧用Page設變數變數
- SAP 應用服務負載均衡的實現負載
- JavaScript資料結構——集合的實現與應用JavaScript資料結構
- 用 Json 來實現 PHP 與 JavaScript 間資料交換JSONPHPJavaScript
- Javascript 實現一個post方式的檔案下載JavaScript
- SAP BPS 變數完美級聯 - Variables in web interaces變數Web
- 用最短的javascript實現位址列載入指令碼JavaScript指令碼
- JavaScript資料結構——圖的實現JavaScript資料結構
- javascript實現雙向資料繫結JavaScript
- what are bit, bps Byte and Bps?
- Javascript實現運算子過載JavaScript
- 用C++實現下載檔案的功能C++
- 用SecureCRT來上傳和下載資料Securecrt
- 如何在docker實現資料掛載Docker
- servlet實現下載功能Servlet
- struts實現下載篇
- javascript實現延遲載入效果JavaScript
- javascript函式過載的實現JavaScript函式
- javascript如何實現函式過載JavaScript函式
- 用歸檔實現無備份下的資料檔案恢復和最近學習記載
- oracle資料下載Oracle
- 資料重整:用Java實現精準Excel資料排序的實用策略JavaExcel排序
- 人工智慧大資料,公開的海量資料集下載,ImageNet資料集下載,資料探勘機器學習資料集下載人工智慧大資料機器學習
- Linux下用PHP實現XML備份Mysql資料庫(轉)LinuxPHPXMLMySql資料庫
- 用JavaScript實現插入排序JavaScript排序
- 用JavaScript實現動畫效果 (轉)JavaScript動畫
- SQL Server資料庫實現負載均衡SQLServer資料庫負載
- SAP ABAP OData 服務的分頁載入資料集的實現(Paging)試讀版
- 機器學習實戰原始碼和資料集下載機器學習原始碼
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- javascript模擬實現函式過載JavaScript函式
- 資料探勘資料集下載資源