JS + Xml + Excel 做报表(客户端生成)

    技术2022-05-20  59

    JS + Xml + Excel 做报表(客户端生成) 2007-12-03 16:38 完成的项目计划要补充一个报表子系统。考虑到我们系统的服务器压力较大,因材我考虑使用Js + xml + Excel 在客户端生成报表。在Server端产生数据:    1> 生成一个DataSet,ds.GetXml()方法返回一个xml格式的字符串.    2> 用一个XmlDocument对象,使用LoadXml(str)方法加载以上的字符串.    3> 将结果组合为一个xml数据岛格式的字符成,并利用LiteralControl写在页面.    4> 写在页面.最后注册客户端方法.        Dim ds As New System.Data.DataSet        Dim doc As New XmlDocument        Dim strXml As New System.Web.UI.LiteralControl        ....................        doc.LoadXml(ds.GetXml())        strXml.Text = "<XML id=xmlData><?xml version=""1.0"" ?><DataSet>" +       doc.DocumentElement.InnerXml + "</DataSet></XML>"        PlaceHolder1.Controls.Add(strXml)        Me.Page.ClientScript.RegisterStartupScript(Me.GetType, "Case", "Print();", True)在Client端产生Excel报表:    1> 首先写了一个Excel.js文件.写出公用的方法.    2> 在产生报表的页面引入该文件<script language="javascript" src="Excel.js"></script>    3> 写Print()方法 function Print(){    //初始化xmlDoc, 及Excel.Application    InitApp()        //初始化表格头部    strHead = "地区|SIID|SI名称|学校ID|学校名称|使用用户数|计费用户数|学校下行流量|每计费数|每使数" ;    InitHead(strHead,xlsheet)        //填充表格    for (i=0;i<nodes.length ;i++ ){        for (j=0;j<nodes[i].childNodes.length ;j++)        {            xlsheet.Cells(i+2,j+1).Value= nodes(i).childNodes(j).text ;        }    }        //格式化表格    FormatRangeLine(nodes.length+1,strHead.split("|").length) ;         //退出    Quit()    return false;}/*************************Excel.js **************************************/ var    xmlDoc        //xml对象var nodes            //数据节点var xls                  //Excle对象var xlBook       //工作博对象var xlsheet          //工作表var strHead        //工作表头//初始化应用程序function InitApp(){    try {                xmlDoc = new   ActiveXObject("Microsoft.XMLDOM")         xmlDoc.async="false"         xmlDoc.load(document.getElementById("xmlData"))         nodes=xmlDoc.documentElement.childNodes    }    catch(e) {        alert( "要打印该表,您的浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!");        return false;    }        try {        xls   = new ActiveXObject("Excel.Application" );    }    catch(e) {        alert( "要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!");        return false;    }    xlBook = xls.Workbooks.Add;    xlsheet = xlBook.Worksheets(1);    xls.visible = true;}//初始化表头function InitHead(strHead,xlsheet){    var ArrayHead = strHead.split("|");    for(var i=0;i<ArrayHead.length;i++)    {        xlsheet.Cells(1,i+1).Value = ArrayHead[i] ;        xlsheet.Cells(1,i+1).Interior.ColorIndex = 35;        xlsheet.Cells(1,i+1).Font.Bold = true;        xlsheet.Columns(i+1).NumberFormatLocal = "@" ;        xlsheet.Columns(i+1).HorizontalAlignment = -4152 ;    }}//格式化有数据的单元格        function FormatRangeLine(ros,cons){    var m_range = xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(ros,cons))    for(var i=7;i<13;i++)    {        m_range.Borders(i).LineStyle = 1 ;        m_range.Borders(i).Weight = 2    ;            m_range.Borders(i).ColorIndex = -4105    ;    }    xlsheet.Columns.AutoFit;}//释放控件function Quit(){    xls.UserControl = true ;    xls=null;    xlBook=null;    xlsheet=null; }/**************End*********************************/ 转自:http://hi.baidu.com/trip008/blog/item/7d427f2cb48b7fef8a13998e.html

    最新回复(0)