SAP BPS: 用Javascript實現資料下載

leniz發表於2011-08-26
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
for(lp = 0 ; lp < len ; lp++){
   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') ;
       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){ 
// 第四列因為不需要進行剔除。
           }else{            
            str = str + "" + arr[row][index] + "";
           }
            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;
 }
 
3. 加入下載按鍵
 
以上測試通過,使用OK。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-705840/,如需轉載,請註明出處,否則將追究法律責任。

SAP BPS: 用Javascript實現資料下載
請登入後發表評論 登入
全部評論

相關文章