昨天做了WAD采用JS导出Excel的方案,虽然结果已经Ok,但是感觉太复杂了,非要整出两个表来,一个显示,一个作为导出用。 所以今天考虑如何在一个报表中,实现两个功能,即可看可导。
首先,导出的报表因为采用了样式表的类,所以导出后没有颜色了,因为类导出后就成了废物了。 于是重点放在如何将样式内嵌到标签中。因为我关注的是背景色,所以我做了如下的修改:
$("td").each(function(i){
bg_color = $(this).css("background-color");
$(this).css("background-color",bg_color);
});
就是把样式表中的颜色,提到标签中,这样不会影响表的展示,但是有利于表导出后有对应的背景颜色。这个改进,实现了背景色全灰的问题。这段代码可以放在报表展示时就执行,免得导出时执行影响用户心情。
接下来要解决的是如何去除超级链接。我想到了正则表达式,不过学艺不精,我原向对类似 110 ,能够一次替换成 110把前后两个标签拿掉,但是不知道如何写,所以我采用分别拿掉 和的方法去做:
var reg = new RegExp("]*>","ig");
var reg1 = new RegExp("","ig");
var uttext = document.all('table1').outerHTML;
uttext = outtext.replace(reg,"");
uttext = outtext.replace(reg1,"");
这个段代码可以放在导出中执行。 这样导出后的单元格就不会有烦人且无用的超级链接了。 还有一个问题就是,导出后的格子之间最好有线框(用户没有说,但是我们想到了)。于是考虑能否用正则法则。 因为导出要有格线,必须对td标签加边框,所以我做了如下修改。
var reg2 = new RegExp("
outtext = outtext.replace(reg2,"于是完整的导出函数如下:
function bringtoexcel(){
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;
}
测试OK,可以休息一下了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-617255/,如需转载,请注明出处,否则将追究法律责任。
<%=items[i].content%>
<%if(items[i].items.items.length) { %><%=items[i].items.items[j].username%> 回复 <%=items[i].items.items[j].tousername%>: <%=items[i].items.items[j].content%>
转载于:http://blog.itpub.net/554557/viewspace-617255/