Jquery easyui datagrid 导出Excel

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,布布扣,bubuko.com

时间: 2024-10-15 11:49:17

Jquery easyui datagrid 导出Excel的相关文章

easyui datagrid导出excel

[第十四篇]easyui datagrid导出excel <a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edit"></i>导出Excel</a> 贴下面的代码之前,我想说一下 我的数据是主外键关系,有多张表关联,所以在做数据的时候,发现很多问题,读取的时候,它会自动读取所有的数据. 当然这不能满足我导出之后的要求,我只

easyui datagrid 导出excel

本片文章是介绍如何用ajax的方式将easyui中的datagrid数据导出到excel中. 声明:该代码是在参考前人的代码写出来的,并非我原创,我只是新增了些功能. 新增部分: 1. 对于列是枚举列的可以设置枚举值,导出时会自动替换列中的枚举值,详细见用例代码. 2. 新增导出时不导出首列或末列指定个数的列,详细接用例代码. 下面是插件源码: /** Jquery easyui datagrid js导出excel 修改自extgrid导出excel * allows for download

【第十四篇】easyui datagrid导出excel

<a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edit"></i>导出Excel</a> 贴下面的代码之前,我想说一下 我的数据是主外键关系,有多张表关联,所以在做数据的时候,发现很多问题,读取的时候,它会自动读取所有的数据. 当然这不能满足我导出之后的要求,我只需要导出我要的字段即可,所以我进行了数据处理. //导出E

jquery easyui datagrid 排序列

点击排序列,将获取参数有:page=1&rows=10&sort=UserName&order=desc c#后台获取sort跟order参数 string sortColumn = Request.Params["sort"].ToString(); string order = Request.Params["order"].ToString(); jquery easyui datagrid 排序列,布布扣,bubuko.com

jquery easyui datagrid设置行样式 不可删除某行

rowStyler: function (index,row) { if (parseInt(row.ksrs) > 0) { return 'color:red'; } }, onLoadSuccess:function(data){ var rows = data.rows; for (var j = 0; j < rows.length; j++) { if (parseInt(rows[j]["ksrs"]) > 0) { $(".datagrid-

JQuery easyUi datagrid 中 editor 动态设置最大值最小值

前言 近来项目中使用到 easyui 来进行页面设计,感觉挺方便的,但是网上除了api外,其他有价值的资料比较少,故在此分享一点经验,供大家参考. 问题 JQuery easyUi datagrid 可编辑行的editor属性具有 min 和 max 属性,设置可以输入的最大值和最小值,但是这个是固定的,如下: [html] view plain copy {field:'workRate',title:'<%/*填报*/%><bean:message key="task.wo

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

本文实例讲述了jQuery EasyUI datagrid实现本地分页的方法.分享给大家供大家参考.具体如下: 一般分页都是后台做,前端做无论从哪方面考虑都不合适.但是有的时候还是有这种需求. 这里重点用到了pagination的监听,以及JS数组的slice方法来完成.代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3

jQuery EasyUI Datagrid性能优化专题

jQuery EasyUI的Datagrid组件功能算是很强大了,不过性能确实不怎么乐观,而对于性能问题,网络上几乎也找不到相关的优化资料,所谓的牛人们可能 都望而却步了.本博客以后会带着分析Datagrid组件的性能问题,并且给出优化方案,也希望大家能集思广益,给出一些好的想法. 慢在哪些方面 以目前对Datagrid的了解程度去看待性能问题,主要有以下几点: 加载大数据量时比较慢(不考虑服务端返回数据的时间),这点尤其体现在IE浏览器里面: 大数据量时,加载后,操作很不流畅,勾选慢,sing

jQuery EasyUI DataGrid API 中文文档

扩展自$.fn.panel.defaults,用 $.fn.datagrid.defaults重写了 defaults . 依赖 panel resizable linkbutton pagination 用法 1.  <table id="tt"></table> 1.  $('#tt').datagrid({ 2.      url:'datagrid_data.json', 3.      columns:[[ 4.          {field:'co