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博客 ” ,链接:https://blog.itpub.net/554557/viewspace-705840/
,如需转载,请注明出处,否则将追究法律责任。
|