From:http://www.cnblogs.com/weiqt/articles/4022399.html

datagrid的扩展方法,用于将当前的数据生成excel需要的内容。

  1 <script>
2 /**
3 Jquery easyui datagrid js导出excel
4 修改自extgrid导出excel
5 * allows for downloading of grid data (store) directly into excel
6 * Method: extracts data of gridPanel store, uses columnModel to construct XML excel document,
7 * converts to Base64, then loads everything into a data URL link.
8 *
9 * @author Animal <extjs support team>
10 *
11 */
12 $.extend($.fn.datagrid.methods, {
13 getExcelXml: function (jq, param) {
14 var worksheet = this.createWorksheet(jq, param);
15 //alert($(jq).datagrid('getColumnFields'));
16 var totalWidth = 0;
17 var cfs = $(jq).datagrid('getColumnFields');
18 for (var i = 1; i < cfs.length; i++) {
19 totalWidth += $(jq).datagrid('getColumnOption', cfs[i]).width;
20 }
21 //var totalWidth = this.getColumnModel().getTotalWidth(includeHidden);
22 return '<?xml version="1.0" encoding="utf-8"?>' +//xml申明有问题,以修正,注意是utf-8编码,如果是gb2312,需要修改动态页文件的写入编码
23 '<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">' +
24 '<o:DocumentProperties><o:Title>' + param.title + '</o:Title></o:DocumentProperties>' +
25 '<ss:ExcelWorkbook>' +
26 '<ss:WindowHeight>' + worksheet.height + '</ss:WindowHeight>' +
27 '<ss:WindowWidth>' + worksheet.width + '</ss:WindowWidth>' +
28 '<ss:ProtectStructure>False</ss:ProtectStructure>' +
29 '<ss:ProtectWindows>False</ss:ProtectWindows>' +
30 '</ss:ExcelWorkbook>' +
31 '<ss:Styles>' +
32 '<ss:Style ss:ID="Default">' +
33 '<ss:Alignment ss:Vertical="Top" />' +
34 '<ss:Font ss:FontName="arial" ss:Size="10" />' +
35 '<ss:Borders>' +
36 '<ss:Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top" />' +
37 '<ss:Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom" />' +
38 '<ss:Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left" />' +
39 '<ss:Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right" />' +
40 '</ss:Borders>' +
41 '<ss:Interior />' +
42 '<ss:NumberFormat />' +
43 '<ss:Protection />' +
44 '</ss:Style>' +
45 '<ss:Style ss:ID="title">' +
46 '<ss:Borders />' +
47 '<ss:Font />' +
48 '<ss:Alignment ss:Vertical="Center" ss:Horizontal="Center" />' +
49 '<ss:NumberFormat ss:Format="@" />' +
50 '</ss:Style>' +
51 '<ss:Style ss:ID="headercell">' +
52 '<ss:Font ss:Bold="1" ss:Size="10" />' +
53 '<ss:Alignment ss:Horizontal="Center" />' +
54 '<ss:Interior ss:Pattern="Solid" />' +
55 '</ss:Style>' +
56 '<ss:Style ss:ID="even">' +
57 '<ss:Interior ss:Pattern="Solid" />' +
58 '</ss:Style>' +
59 '<ss:Style ss:Parent="even" ss:ID="evendate">' +
60 '<ss:NumberFormat ss:Format="yyyy-mm-dd" />' +
61 '</ss:Style>' +
62 '<ss:Style ss:Parent="even" ss:ID="evenint">' +
63 '<ss:NumberFormat ss:Format="0" />' +
64 '</ss:Style>' +
65 '<ss:Style ss:Parent="even" ss:ID="evenfloat">' +
66 '<ss:NumberFormat ss:Format="0.00" />' +
67 '</ss:Style>' +
68 '<ss:Style ss:ID="odd">' +
69 '<ss:Interior ss:Pattern="Solid" />' +
70 '</ss:Style>' +
71 '<ss:Style ss:Parent="odd" ss:ID="odddate">' +
72 '<ss:NumberFormat ss:Format="yyyy-mm-dd" />' +
73 '</ss:Style>' +
74 '<ss:Style ss:Parent="odd" ss:ID="oddint">' +
75 '<ss:NumberFormat ss:Format="0" />' +
76 '</ss:Style>' +
77 '<ss:Style ss:Parent="odd" ss:ID="oddfloat">' +
78 '<ss:NumberFormat ss:Format="0.00" />' +
79 '</ss:Style>' +
80 '</ss:Styles>' +
81 worksheet.xml +
82 '</ss:Workbook>';
83 },
84 createWorksheet: function (jq, param) {
85 // Calculate cell data types and extra class names which affect formatting
86 var cellType = [];
87 var cellTypeClass = [];
88 //var cm = this.getColumnModel();
89 var totalWidthInPixels = 0;
90 var colXml = '';
91 var headerXml = '';
92 var visibleColumnCountReduction = 0;
93 var cfs = $(jq).datagrid('getColumnFields');
94 var colCount = cfs.length;
95 for (var i = 1; i < colCount; i++) {
96 if (cfs[i] != '') {
97 var w = $(jq).datagrid('getColumnOption', cfs[i]).width;
98 totalWidthInPixels += w;
99 if (cfs[i] === "") {
100 cellType.push("None");
101 cellTypeClass.push("");
102 ++visibleColumnCountReduction;
103 }
104 else {
105 colXml += '<ss:Column ss:AutoFitWidth="1" ss:Width="130" />';
106 headerXml += '<ss:Cell ss:StyleID="headercell">' +
107 '<ss:Data ss:Type="String">' + $(jq).datagrid('getColumnOption', cfs[i]).title + '</ss:Data>' +
108 '<ss:NamedCell ss:Name="Print_Titles" /></ss:Cell>';
109 cellType.push("String");
110 cellTypeClass.push("");
111 }
112 }
113 }
114 var visibleColumnCount = cellType.length - visibleColumnCountReduction;
115 var result = {
116 height: 9000,
117 width: Math.floor(totalWidthInPixels * 30) + 50
118 };
119 var rows = $(jq).datagrid('getRows');
120 // Generate worksheet header details.
121 var t = '<ss:Worksheet ss:Name="' + param.title + '">' +
122 '<ss:Names>' +
123 '<ss:NamedRange ss:Name="Print_Titles" ss:RefersTo="=\'' + param.title + '\'!R1:R2" />' +
124 '</ss:Names>' +
125 '<ss:Table x:FullRows="1" x:FullColumns="1"' +
126 ' ss:ExpandedColumnCount="' + (visibleColumnCount + 2) +
127 '" ss:ExpandedRowCount="' + (rows.length + 2) + '">' +
128 colXml +
129 '<ss:Row ss:AutoFitHeight="1">' +
130 headerXml +
131 '</ss:Row>';
132 // Generate the data rows from the data in the Store
133 //for (var i = 0, it = this.store.data.items, l = it.length; i < l; i++) {
134 for (var i = 0, it = rows, l = it.length; i < l; i++) {
135 t += '<ss:Row>';
136 var cellClass = (i & 1) ? 'odd' : 'even';
137 r = it[i];
138 var k = 0;
139 for (var j = 1; j < colCount; j++) {
140 //if ((cm.getDataIndex(j) != '')
141 if (cfs[j] != '') {
142 //var v = r[cm.getDataIndex(j)];
143 var v = r[cfs[j]];
144 if (cellType[k] !== "None") {
145 t += '<ss:Cell ss:StyleID="' + cellClass + cellTypeClass[k] + '"><ss:Data ss:Type="' + cellType[k] + '">';
146 if (cellType[k] == 'DateTime') {
147 t += v.format('Y-m-d');
148 } else {
149 t += v;
150 }
151 t += '</ss:Data></ss:Cell>';
152 }
153 k++;
154 }
155 }
156 t += '</ss:Row>';
157 }
158 result.xml = t + '</ss:Table>' +
159 '<x:WorksheetOptions>' +
160 '<x:PageSetup>' +
161 '<x:Layout x:CenterHorizontal="1" x:Orientation="Landscape" />' +
162 '<x:Footer x:Data="Page &P of &N" x:Margin="0.5" />' +
163 '<x:PageMargins x:Top="0.5" x:Right="0.5" x:Left="0.5" x:Bottom="0.8" />' +
164 '</x:PageSetup>' +
165 '<x:FitToPage />' +
166 '<x:Print>' +
167 '<x:PrintErrors>Blank</x:PrintErrors>' +
168 '<x:FitWidth>1</x:FitWidth>' +
169 '<x:FitHeight>32767</x:FitHeight>' +
170 '<x:ValidPrinterInfo />' +
171 '<x:VerticalResolution>600</x:VerticalResolution>' +
172 '</x:Print>' +
173 '<x:Selected />' +
174 '<x:DoNotDisplayGridlines />' +
175 '<x:ProtectObjects>False</x:ProtectObjects>' +
176 '<x:ProtectScenarios>False</x:ProtectScenarios>' +
177 '</x:WorksheetOptions>' +
178 '</ss:Worksheet>';
179 return result;
180 }
181 });
182 </script>

Html:

 1 <div style="margin-bottom:5px" id="tb">
2 <a href="#" class="easyui-linkbutton" onclick="return Save_Excel()" iconCls="icon-save" plain="true" title="导出excel文件"></a>
3 </div>
4 <table id="dg"></table>
5 <script>
6 function Save_Excel() {//导出Excel文件
7 //getExcelXML有一个JSON对象的配置,配置项看了下只有title配置,为excel文档的标题
8 var data = $('#dg').datagrid('getExcelXml', { title: 'datagrid import to excel' }); //获取datagrid数据对应的excel需要的xml格式的内容
9 //用ajax发动到动态页动态写入xls文件中
10 var url = 'datagrid-to-excel.ashx'; //如果为asp注意修改后缀
11 $.ajax({ url: url, data: { data: data }, type: 'POST', dataType: 'text',
12 success: function (fn) {
13 alert('导出excel成功!');
14 window.location = fn; //执行下载操作
15 },
16 error: function (xhr) {
17 alert('动态页有问题\nstatus:' + xhr.status + '\nresponseText:' + xhr.responseText)
18 }
19 });
20 return false;
21 }
22 $(function () {
23 $('#dg').datagrid({
24 singleSelect: true,
25 toolbar:'#tb',
26 url: 'product.json',
27 fitColumns: true, pagination: true, pageSize: 3,
28 title: 'easyui datagrid数据导出excel文件示例',
29 width: 400,
30 height: 300,
31 columns: [[{ field: 'itemid', width: 80, title: 'Item ID' },
32 { field: 'productname', width: 100, editor: 'text', title: 'Product Name' },
33 { field: 'listprice', width: 80, align: 'right', title: 'List Pirce' },
34 { field: 'unitcost', width: 80, align: 'right', title: 'Unit Cost'}]]
35 });
36 });
37 </script>

asp.net后台代码

 1 <%@ WebHandler Language="C#" class="datagrid_to_excel" %>
2
3 using System;
4 using System.Web;
5 using System.IO;
6 using System.Text;
7 public class datagrid_to_excel : IHttpHandler
8 {
9 public void ProcessRequest(HttpContext context)
10 {
11 string fn = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
12 string data = context.Request.Form["data"];
13 File.WriteAllText(context.Server.MapPath(fn), data, Encoding.UTF8);//如果是gb2312的xml申明,第三个编码参数修改为Encoding.GetEncoding(936)
14
15 context.Response.Write(fn);//返回文件名提供下载
16 }
17 public bool IsReusable {
18 get {
19 return false;
20 }
21 }
22
23 }

效果图

注意:如果在使用中报“从客户端(exportContent="<xml version="1.0" e...")中检测到有潜在危险的 Request.Form 值。”,需要修改一下webconfig文件

在Web.Config文件中的配置节</system.web>之前加上如下一句配置就可以了
<httpRuntime requestValidationMode="2.0" />

Jquery easyui datagrid 导出Excel的更多相关文章

  1. easyui datagrid导出excel

    [第十四篇]easyui datagrid导出excel   <a class="btn btn-app" onclick="exportExcel()" ...

  2. 【第十四篇】easyui datagrid导出excel

    <a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edi ...

  3. asp.net (jquery easy-ui datagrid)通用Excel文件导出(NPOI)

    http://www.cnblogs.com/datacool/archive/2013/03/12/easy-ui_datagrid_export_excel_asp_net.html

  4. MVC项目中怎样用JS导出EasyUI DataGrid为Excel

    在做一中考评项目的时候,遇到了这么一个需求.就是把评教后得到的老师的成绩导出为Excel.事实上需求非常普通.实现起来有些复杂.由于老师考评不但有固定的考核项,还有额外加分项.于是我们就抽出来了一个表 ...

  5. 浅谈jQuery easyui datagrid操作单元格样式

    今天项目上遇到问题,就是表格风格统一的问题,由于用了2个不同的框架,所以如果要大修比较麻烦,考虑到修改表格样式工作量会少很多,所以考虑修改jQuery easyui datagrid数据网格的样式. ...

  6. jQuery EasyUI datagrid实现本地分页的方法

    http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...

  7. jQuery EasyUI DataGrid Checkbox 数据设定与取值

    纯粹做个记录,以免日后忘记该怎么设定. 这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数 ...

  8. jquery easyui datagrid使用参考

    jquery easyui datagrid使用参考   创建datagrid 在页面上添加一个div或table标签,然后用jquery获取这个标签,并初始化一个datagrid.代码如下: 页面上 ...

  9. jquery easyui datagrid 获取Checked选择行(勾选行)数据

    原文:jquery easyui datagrid 获取Checked选择行(勾选行)数据 getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录. getSel ...

随机推荐

  1. go语言中间的循环

    在Go语言中只有很少的几个控制结构,它没有while或者do-while循环. 但是它有for.switch.if.而且switch接受像for那样可选的初始化语句.下面来认识一下他们 一.if语句 ...

  2. 深入浅出RxJava(一:基础篇)

    RxJava正在Android开发者中变的越来越流行.唯一的问题就是上手不容易,尤其是大部分人之前都是使用命令式编程语言.但是一旦你弄明白了,你就会发现RxJava真是太棒了. 这里仅仅是帮助你了解R ...

  3. Windows 内存架构

    理解 Virtual Memory, Physical Memory, Committed Memory, Page File, Working Set, Modified Pages, Standb ...

  4. 20160808_安装JDK7u79

    1.将 jdk-7u79-linux-x64.tar.gz 解压,得到文件夹“jdk1.7.0_79” 将 文件夹“jdk1.7.0_79” 复制到 “/usr/java/”下 2.配置环境变量: 文 ...

  5. GATK原理及流程

    用GATK跑了很久的流程,但还是不知道它的原理,现在项目要深入,没有流程可用,一切都要手动,所以必须开始着手了解GATK运行的原理,必须要知道需要输入什么,基本的算法,输出是什么. 参见: GATK使 ...

  6. apt-get remove, apt-get autoremove和aptitude remove的区别

    这篇文章的图片链接发生了问题,无法正常查看图片,所以我在CSDN转载一下,特此声明. apt-getremove的行为我们很好理解,就是删除某个包的同时,删除依赖于它的包,例如:A依赖于B, B依赖于 ...

  7. 【bzoj1038】瞭望塔

    [bzoj1038]瞭望塔 题意 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折 ...

  8. 日期操作类--Date类

    Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ...

  9. html5日期转long

    正确:日期,时间均是实时的 var inDate = $("#inDate").val().trim(); if(inDate != "") { inDate ...

  10. 百度地图API首页 -- 鼠标经过:类似翻页效果和 类似锚点链接效果

    var timer; $("li").on("mouseover",function(){ clearTimeout(timer); timer=null; $ ...