工作_导出总结_页面的JS

哈哈,今天踢球进了两个,加上上次的一个,一共三个了.

接着说导出,先说页面上的东西,主要是javascript,而其中有部分重编码的功能是用VB来写的,
1 首先,是如何将页面上的数据写到EXCEL中,前提当然是要使用IE了.相当简单:

var ExcelApp = new ActiveXObject("Excel.Application");
var ExcelWB = ExcelApp.Workbooks.add();
var ExcelSheet = ExcelWB.ActiveSheet;  //这样就得到了一个Excel的Sheet的对象

//然后就可以用两个FOR循环向这个sheet 中写数据了,用下面的语句,依次i行j列

ExcelSheet.Cells(i,j).value = data[i][j];  //data是什么就不用我说了吧,你要写入什么,就自己去处理.

还可以用另一种方法写入,那就是COPY.直接把页面中某<table>中的行列COPY到EXCEL中.这有个好处是保持页面表格的原貌,包括背景色,合并格等,但它只能COPY页面中的表格.
var sel = document.body.createTextRange();
sel.moveToElementText(tablename); //tablename就是要COPY的表格的ID
sel.select();
sel.execCommand("copy");
ExcelSheet.paste();

由于我是要将返回的流写入Excel,那就要用第一种.

2 下面是如何使用xmlhttp发出请求并接收响应
var http_request = false;

function send_request(url){//初始化,指定处理函数,发送请求的函数
    http_request = false;

//开始初始化XMLHttpRequest对象,本来此例中不考虑其他浏览器,但还是把应该的代码写出来
if(window.XMLHttpRequest){//Mozilla浏览器
    http_request = new XMLHttpRequest();
    if(http_request.overrideMimeType){//设置MiME类别
        http_request.overrideMimeType("text/xml");
    }
}else if(window.ActiveXObject){//IE
    try{
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(e){}
    }
}

if(!http_reqeust){//异常,创建对象实例失败
    window.alert("不能创建XMLHttpRequest对象实例");
    return false;
}
http_request.onreadystatechange = processRequest;
//确定发送请求的方式和URL以及是否同步执行下段代码
//如果用GET方式,代码如下
 http_request.open("GET",url,false);
 http_request.sent(null);
//注意,返回数据中如果有中文,那就要使用response.setHeader("charset","GB2312");来避免乱码.

//如果使用POST方式,代码如下
 var para = "name1="+value1+"&name2="+value2;//para是要传过去的参数
 http_request.open("POST",url,false);
 http_request.setRequestHeader("Content-Type","applicaton/x-www-form-urlencoded");
 http_request.send(para);
}

//处理返回信息的函数

function processRequest(){
    if(http_request.readyState==4){//判断对象状态
        if(http_request.status == 200){//信息已经成功返回,开始处理
            //在这里用http_request.responseText取得返回的数据,然后写入到EXCEL中.实际上我用的是responseBody,以解决编码问题,后面再说.
        }else{
            alert("请求的页面有异常");
        }
    }
}

3 有了上面两步,就可以完成向服务器发出请求,并将返回数据写入EXCEL的功能了,只是返回数据中有中文,而xmlhttp返回值都是用UTF-8编码的.所以还需要做一步解码
重解码代码如下:

//确认需要的VBScript函数是否存在,不存在就写一个 
try{ 
if(typeof(rsB)=="undefined"){initVBS();}; 
}catch(e){initVBS();} 

//**全局变量** 
//glbEncode储存ascii到unicode字符的转换,这样做的好处是可以提高重复解码时的解码效率 
glbEncode=new Array(); 

//**初始化函数** 
function initVBS(){ 
 //初始化VBscript的两个funtion:rsB 和 vbChar 
 strVBS="<script language=vbscript>/r/n"; 
 strVBS+="Function rsB(vIn)/r/nrsB=MidB(vIn,1)/r/nEnd Function/r/n"; 
 strVBS+="Function vbChar(ss)/r/nvbChar = Chr(ss)/r/nEnd Function/r/n"; 
 strVBS+="<//script>"; 
 document.write(strVBS); 

//重编码 
function reCode(b){ 
 var s=rsB(b); 
 s=escape(s).replace(/%u/gi,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/ig,"%@$1$2"); 
 var uniS=s.match(//%@(.{4})/g); 
 s=s.replace(/@/g,""); 
 if(uniS){ 
  var k; 
  for(var i=0;i<uniS.length;i++){ 
   k=uniS[i].substring(2,6); 
   if(!glbEncode[k]){ 
    glbEncode[k]=escape(vbChar(eval("0x"+k))).substring(1,6); 
   } 
  } 
  tempA=s.split("%"); 
  for(var i=0;i<tempA.length;i++){ 
   if(tempA[i].length!=2){ 
    tempA[i]=glbEncode[tempA[i]]; 
   } 
  } 
  s=tempA.join("%"); 
 } 
 return unescape(s); 

只要将调用reCode重编码返回值就可以得到正常的中文
 var result = reCode(http_request.responseBody);

请注意,在服务器端写数据时还需要做一件事
String result = new String(result.getByte("GB2312"));
好了,页面的事情就没有了,剩下的事就是服务器怎么取数据了.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值