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

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*********************************/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值