“How to Save Report To Excel” 技術改進

leniz發表於2009-10-23

昨天做了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("

     var uttext = document.all('table1').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; 
 }

測試OK,可以休息一下了。

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

下一篇: Word 設定目錄
“How to Save Report To Excel”  技術改進
請登入後發表評論 登入
全部評論

相關文章