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 + "" + 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;
}
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. 加入下载按键
onclick="bringtoexcel()"
class="urBtnStd urV"
id="fb_print"
ct="Button" style="white-space:nowrap;">数据下载
class="urBtnStd urV"
id="fb_print"
ct="Button" style="white-space:nowrap;">数据下载
以上测试通过,使用OK。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-705840/,如需转载,请注明出处,否则将追究法律责任。
请登录后发表评论
登录
全部评论
<%=items[i].createtime%>
<%=items[i].content%>
<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%}%> <%if(items[i].items.total > 5) { %>
<%}%> <%}%>
<%=items[i].items.items[j].createtime%>
<%=items[i].items.items[j].username%> 回复 <%=items[i].items.items[j].tousername%>: <%=items[i].items.items[j].content%>
还有<%=items[i].items.total-5%>条评论
) data-count=1 data-flag=true>点击查看
<%}%>
转载于:http://blog.itpub.net/554557/viewspace-705840/

1432






