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>
View Code

 

实例:

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>
View Code

 

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 }
View Code

 

效果图:

 

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

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

 

Jquery easyui datagrid 导出Excel,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。