您的位置:首页 > Web前端 > JavaScript

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

2011-04-14 15:53 671 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: