ligerui中grid导出为Excel的例子(asp.net)

截图:


实现原理: 

ligerui是基于jquery来搭建页面,一个grid控件本质上是几个table组合而成

如果可以将这个DOM的架构直接传回后台,自然可以输出为excel或者word或者pdf

为何不在前台Js实现html导出为excel,因为js来创建excel这玩意会碰到浏览器安全性问题,不实用

这个也贴一个方法,一个js搞定

[javascript]  view plain copy
  1. function method1() {//整个表格拷贝到EXCEL中     
  2.    //检索浏览器    
  3.    if(navigator.userAgent.indexOf("MSIE")<0){    
  4.        alert('请用ie浏览器进行表格导出');    
  5.        return ;    
  6.    }    
  7.   
  8.    var tableid="maingrid";    
  9.    var curTbl = document.getElementById(tableid);     
  10.    var oXL = null;     
  11.    try {    
  12.        oXL = GetObject("""Excel.Application");    
  13.    }    
  14.    catch (E) {    
  15.        try {    
  16.            oXL = new ActiveXObject("Excel.Application");    
  17.        }    
  18.        catch (E2) {    
  19.            alert("Please confirm:\n1.Microsoft Excel has been installed.\n2.Internet Options=>Security=>Setting \"Enable unsafe ActiveX\"");    
  20.            return;    
  21.        }    
  22.    }    
  23.   
  24.    //创建AX对象excel     
  25.    var oWB = oXL.Workbooks.Add();     
  26.     //获取workbook对象     
  27.    var oSheet = oWB.ActiveSheet;     
  28.            
  29.    //在此进行样式控制    
  30.    oSheet.Rows(1+":"+1).RowHeight =20;//定义行高    
  31.    oSheet.Rows(2+":"+2).RowHeight =30;    
  32.   
  33.    oSheet.Rows(1).HorizontalAlignment=3;       
  34.   
  35.    var sel = document.body.createTextRange(); //激活当前sheet     
  36.    sel.moveToElementText(curTbl); //把表格中的内容移到TextRange中    
  37.    sel.select();  //全选TextRange中内容     
  38.    sel.execCommand("Copy"); //复制TextRange中内容     
  39.    oSheet.Paste(); //粘贴到活动的EXCEL中     
  40.    oXL.Visible = true//设置excel可见属性    
  41.        
  42.    oSheet.Application.Quit();   //结束当前进程    
  43.   
  44.    window.opener=null;    
  45.    window.close();//关闭当前窗口    
  46.        
  47. }   
(这个方法,只可IE并且要允许不安全的activex运行,这也太危险了,这年头...)


下面采用的导EXCEL方法,适合不翻页的grid,而且无需再读一次数据库,

对于翻页的grid来说,要导全部,当然后台要再读一次数据库,这种导EXCEL方法baidu一大堆,这里不重复


代码:

grid.htm

[html]  view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" >  
  3. <head>  
  4.     <title></title>  
  5.     <link href="../lib/ligerUI/skins/Aqua/css/ligerui-all.css" rel="stylesheet" type="text/css" />  
  6.     <link href="../lib/ligerUI/skins/ligerui-icons.css" rel="stylesheet" type="text/css" />  
  7.     <script src="../lib/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>  
  8.     <script src="../lib/ligerUI/js/plugins/ligerGrid.js" type="text/javascript"></script>  
  9.     <script src="../lib/ligerUI/js/plugins/ligerToolBar.js" type="text/javascript"></script>  
  10.     <script src="../lib/ligerUI/js/plugins/ligerDialog.js" type="text/javascript"></script>  
  11.     <script src="AllProductData.js" type="text/javascript"></script>   
  12.     <script type="text/javascript">  
  13.         $(function () {  
  14.           
  15.             $("#toptoolbar").ligerToolBar({ items: [  
  16.                                                         {text: '导出Excel',id:'excel',icon:'print',click:itemclick},  
  17.                                                         {text: '导出Word' ,id:'word',icon:'print',click:itemclick}                                                     
  18.                                                    ]  
  19.                                           });          
  20.            
  21.             $("#maingrid").ligerGrid({  
  22.                 columns: [  
  23.                     { display: '主键', name: 'ProductID', type: 'int', totalSummary:{type: 'count'}},  
  24.                     { display: '产品名', name: 'ProductName', align: 'left', width: 200 },  
  25.                     { display: '单价', name: 'UnitPrice', align: 'right', type:'float',totalSummary:{render: function (suminf, column, cell){return '<div>最大值:' + suminf.max + '</div>';},align: 'left'}},  
  26.                     { display: '仓库数量', name: 'UnitsInStock', align: 'right', type: 'float',totalSummary:{type: 'sum'}}  
  27.                 ],   
  28.                 dataAction: 'local',  
  29.                 data: AllProductData, sortName: 'ProductID',  
  30.                 showTitle: false, totalRender: f_totalRender,  
  31.                 width: '100%', height: '100%',heightDiff:-10  
  32.             });  
  33.   
  34.             $("#pageloading").hide();  
  35.         });  
  36.           
  37.         function f_totalRender(data, currentPageData)  
  38.         {  
  39.             return "总仓库数量:"+data.UnitsInStockTotal;   
  40.         }  
  41.                   
  42.         function itemclick(item)  
  43.         {     
  44.             grid = $("#maingrid").ligerGetGridManager();                  
  45.             if(item.id)  
  46.             {  
  47.                 switch (item.id)  
  48.                 {     
  49.                     case "excel":$.ligerDialog.open({url: "../service/print.aspx?exporttype=xls"});return;  
  50.                     case "word":$.ligerDialog.open({url: "../service/print.aspx?exporttype=doc"});return;  
  51.                 }     
  52.             }              
  53.         }                   
  54.     </script>  
  55. </head>  
  56. <body style="padding:0px; overflow:hidden; height:100%  ">  
  57.     <div id="toptoolbar"></div>   
  58.     <div id="maingrid" style="margin:0; padding:0"></div>   
  59.     <div style="display:none;"></div>   
  60. </body>  
  61. </html>  

导出页面print.aspx

[html]  view plain copy
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="print.aspx.cs" Inherits="example" EnableEventValidation = "false" ValidateRequest="false" %>  
  2.   
  3. <html>  
  4. <head>  
  5.     <title></title>  
  6.     <link href="../lib/ligerUI/skins/aqua/css/ligerui-all.css" rel="stylesheet" type="text/css" />          
  7.     <script src="../lib/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>  
  8.     <script src="../lib/ligerUI1.1.0/js/ligerui.min.js" type="text/javascript"></script>          
  9.     <script type="text/javascript">   
  10.         function GetQueryString(name)    
  11.         {    
  12.             var reg = new RegExp("(^|&)"+name+"=([^&]*)(&|$)");    
  13.             var rwindow.location.search.substr(1).match(reg);    
  14.             if (r!=null) return unescape(r[2]);return null;    
  15.         }      
  16.                  
  17.         function gethtml(g)  
  18.         {                                  
  19.            parent.$(".l-grid-header-table",g).attr("border","1");  
  20.            parent.$(".l-grid-body-table",g).attr("border","1");  
  21.              
  22.             $("#hf").val(  
  23.                         parent.$(".l-grid-header",g).html()+             //这里把表头捞出来  
  24.                         parent.$(".l-grid-body-inner",g).html()+         //表身,具体数据  
  25.                         parent.$(".l-panel-bar-total",g).html()+"<br/>"+ //这是全局汇总,1.1.0版本新添加的                         
  26.                         parent.$(".l-bar-text",g).html()                 //这是翻页讯息         
  27.                         );  
  28.                           
  29.            parent.$(".l-grid-header-table",g).attr("border","0");  
  30.            parent.$(".l-grid-body-table",g).attr("border","0");                          
  31.          // parent.$(".l-grid-header-table",g).removeAttr("border");                
  32.          // parent.$(".l-grid-body-table",g).removeAttr("border");                                                  
  33.         }  
  34.           
  35.         function init()  
  36.         {  
  37.             if (GetQueryString("exporttype")=="xls")  
  38.             {  
  39.                 document.getElementById("btnxls").click();  
  40.             }      
  41.             else  
  42.             {  
  43.                 document.getElementById("btndoc").click();      
  44.             }  
  45.             setTimeout(function ()  
  46.             {  
  47.                 parent.$.ligerDialog.close();                 
  48.             }, 3000);                 
  49.         }  
  50.                                   
  51.     </script>  
  52. </head>  
  53. <body style="padding:20px" onload="init()">  
  54.     <form id="form1" runat="server">          
  55.     导出中...  
  56.     <div style="visibility:hidden">  
  57.     <asp:Button ID="btnxls" runat="server" Text="导出Excel" onclick="Button1_Click" OnClientClick="gethtml('#maingrid')"/>  
  58.     <asp:Button ID="btndoc" runat="server" Text="导出Word"  onclick="Button2_Click" OnClientClick="gethtml('#maingrid')"/>  
  59.     </div>  
  60.     <asp:HiddenField ID="hf" runat="server" />    
  61.     </form>  
  62. </body>  
  63. </html>  

print.aspx.cs

[csharp]  view plain copy
  1. using System;  
  2. using System.Collections;  
  3. using System.Configuration;  
  4. using System.Data;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.HtmlControls;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11.   
  12. namespace service  
  13. {  
  14.     public partial class print : System.Web.UI.Page  
  15.     {  
  16.         protected void Page_Load(object sender, EventArgs e)  
  17.         {  
  18.             if (!IsPostBack)  
  19.             {  
  20.             }  
  21.         }  
  22.   
  23.         void exportexcel()  
  24.         {  
  25.             Response.Clear();  
  26.             Response.Buffer = true;  
  27.             Response.Charset = "utf-8";  
  28.             Response.AppendHeader("Content-Disposition""attachment;filename=tmp.xls");  
  29.             Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");  
  30.               
  31.             Response.ContentType = "application/ms-excel";  
  32.             this.EnableViewState = false;  
  33.             System.IO.StringWriter oStringWriter = new System.IO.StringWriter();  
  34.             System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);  
  35.             oHtmlTextWriter.WriteLine(hf.Value);    
  36.             Response.Write(oStringWriter.ToString());              
  37.             Response.End();  
  38.         }  
  39.   
  40.         void exportword()  
  41.         {  
  42.             Response.Clear();  
  43.             Response.Buffer = true;  
  44.             Response.Charset = "utf-8";  
  45.             Response.AppendHeader("Content-Disposition""attachment;filename=tmp.doc");  
  46.             Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");  
  47.   
  48.             Response.ContentType = "application/ms-word";  
  49.             this.EnableViewState = false;  
  50.             System.IO.StringWriter oStringWriter = new System.IO.StringWriter();  
  51.             System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);  
  52.             oHtmlTextWriter.WriteLine(hf.Value);  
  53.             Response.Write(oStringWriter.ToString());  
  54.             Response.End();  
  55.         }  
  56.   
  57.         protected void Button1_Click(object sender, EventArgs e)  
  58.         {  
  59.             exportexcel();  
  60.         }  
  61.   
  62.         protected void Button2_Click(object sender, EventArgs e)  
  63.         {  
  64.             exportword();  
  65.         }  
  66.   
  67.     }  
  68. }  

代码原理:在点导出按钮的时候,弹一个print.aspx页面,这个页面把grid的html传给自己一个叫hf的hidden里面,然后后台response输出这个html

首先需要在Vue项目引入LigerUI的相关文件,可以通过CDN或下载LigerUI的文件进行引入。然后在Vue组件定义一个grid组件,并在该组件引入LigerUI的相关代码。 在Vue组件的template,可以使用LigerUI提供的grid标签来创建grid组件,例如: ``` <liger-grid :columns="columns" :data="data"></liger-grid> ``` 其,columns是定义grid的列信息,data是要展示的数据信息。 在Vue组件的script,需要定义columns和data两个变量,例如: ``` <script> export default { name: 'MyGrid', data () { return { columns: [ { display: 'ID', name: 'id', width: 80, align: 'center' }, { display: 'Name', name: 'name', width: 120, align: 'left' }, { display: 'Email', name: 'email', width: 200, align: 'left' }, { display: 'Address', name: 'address', width: 200, align: 'left' } ], data: [ { id: 1, name: 'John', email: 'john@example.com', address: 'New York' }, { id: 2, name: 'Jane', email: 'jane@example.com', address: 'London' }, { id: 3, name: 'Bob', email: 'bob@example.com', address: 'Paris' } ] } } } </script> ``` 以上是一个简单的示例,其columns定义了grid的列信息,包括列名、列字段名、列宽度和对齐方式等,data定义了要展示的数据信息。 需要注意的是,LigerUIgrid组件需要在mounted生命周期进行初始化,例如: ``` mounted () { this.$nextTick(() => { $(this.$el).ligerGrid({ columns: this.columns, data: this.data }) }) } ``` 以上代码,使用jQuery选择当前组件的元素,然后调用ligerGrid方法进行初始化,传入columns和data参数。 最后,需要在组件销毁时销毁grid组件,例如: ``` beforeDestroy () { $(this.$el).ligerDestroy() } ``` 以上是用Vue实现LigerUIgrid组件的基本步骤,可以根据实际需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值