导出Excel(Ext 前台部分)
开发思路:
- 序列化当前GridPanel 数据, 表头结构(用于对应关系), 通过控制器Aspose写到Excel中, 然后返回临时文件地址, 弹出窗口下载.
function btnExportOut(gpl, isOnlyCurrentPage) {
var reportName = '导出文件名前缀';
if (Ext.isEmpty(gpl.xtype)) {
gpl = App[gpl];
if (gpl.xtype != 'grid' && gpl.xtype != 'treepanel') {
Ext.MessageBox.show({
title: "提示",
msg: "导出参数错误。",
modal: true,
buttons: Ext.Msg.OK,
icon: Ext.Msg.INFO
});
return;
}
}
if (gpl.xtype == "grid" && gpl.store.data.items.length == 0 && isOnlyCurrentPage == 1) {
Ext.MessageBox.show({
title: "提示",
msg: "列表没有数据,不能进行导出。",
modal: true,
buttons: Ext.Msg.OK,
icon: Ext.Msg.INFO
});
return;
}
if (gpl.xtype == "treepanel" && gpl.items.length == 0 && isOnlyCurrentPage == 1) {
Ext.MessageBox.show({
title: "提示",
msg: "列表没有数据,不能进行导出。",
modal: true,
buttons: Ext.Msg.OK,
icon: Ext.Msg.INFO
});
return;
}
Ext.net.Mask.show({ msg: '正在导出数据,请稍候...' });
var datas = getGirdAllData(gpl);
Ext.Ajax.request({
url: isOnlyCurrentPage == 1 ? '/当前页' : '/全部页/',
params: {
queryP: Ext.encode(gpl.store.readParameters().apply), //Grid 的parameter参数数组
jsonData: Ext.encode(datas), //当前页需要把数据传入. 全部页用不到这个数据.
_reportName: reportName,
_headerStruct: getEncodeGridHeader(gpl)
},
method: 'POST',
timeout: 600000,
success: function (u) {
//防止下载出现0kb情况,等待后台下载
setTimeout(function () {
Ext.net.Mask.hide();
showExport(u.responseText);
}, 3000);
},
failure: function (u) {
Ext.net.Mask.hide();
Ext.Msg.alert(u.responseText);
}
})
}
var showExport = function (url) {
Ext.MessageBox.show({
title: "Excel下载提示",
msg: "<a href='" + url + "' style='color: blue;text-decoration: none;font-size:15px;font-weight: bold;'>请点击此处下载到本地</a>",
modal: true,
buttons: Ext.Msg.CANCEL,
icon: Ext.Msg.INFO
});
}
function getEncodeGridHeader(gpl) {
var headers;
dataIndex = 0;
var headers = getAllHeader(gpl.columns, gpl);
headers = Ext.encode(headers);
return headers;
}
//获取所以列并带主键
var getAllHeader = function (gplColumns, gpl) {
var data = [];
for (var colIndex in gplColumns) {
var col = gplColumns[colIndex];
if (col.dataIndex != "Checked") {
var colText = col.text == null ? "" : col.text;
if (colText != "") {
var tmp = {
Text: col.text.toLowerCase().replace(/<br\/>/g, "").replace(/<\/br>/g, "").replace(/</g, "").replace(/>/g, ""),
Width: getWidth(col),
Cols: []
};
var field = gpl.store.getFieldByName(col.dataIndex);
if (field) {
tmp.DataType = field.type.type;
}
if (col.items && col.items.length > 0) {
tmp.Cols = getAllHeader(col.items.items, gpl);
} else if (col.columns && col.columns.length > 0) {
tmp.Cols = getAllHeader(col.columns, gpl);
} else {
tmp.DataIndex = col.dataIndex;
tmp.Index = "d" + dataIndex++; //索引
}
if (col.hidden) {
tmp.Hiden = true;
if (colText.toLowerCase() == "id" || colText.toLowerCase() == "mid" || colText.toLowerCase() == "sid") {
}
else {
continue;
}
}
else {
tmp.Hiden = false;
}
tmp.xtype = col.xtype; //列类型
if (col.editor) {
tmp.editor = col.editor.xtype; //文本框类型
}
else {
tmp.editor = "";
}
if (col.xtype == 'rownumberer' || col.xtype == 'commandcolumn') {
continue;
}
data.push(tmp);
}
}
}
return data;
};
//获取宽度
var getWidth = function (col) {
if (col.width) {
return col.width;
} else if (col.getWidth) {
return col.getWidth();
} else {
return 100;
}
}
一堆操作获得表头-实际列json结构:

调用部分:
<ext:Button ID="Button3" runat="server" Text="导出全部页Excel" Icon="ArrowDown" TagString="grid">
<Listeners>
<Click Handler="btnExportOut(SalaryBonusCalculationInForGPanel, 0)" />
</Listeners>
</ext:Button>
导出Excel(Ext 前台部分)的更多相关文章
- asp.net ashx导出excel到前台
最近有一个项目使用以前的ashx,不能使用FileResult,只有通过response返回拼接好的字符串.但是通过查阅资料拼接的字符串总是提示文件格式不匹配,虽然能正常打开,但是体验很不好,在此总结 ...
- Extjs4.2纯前台导出Excel总结
前段时间做了两个项目,用到了Extjs4.2纯前台导出Excel,遇到很多的问题,从网上也找了很多资料,在这里总结一下,做一个记录: 使用方法: 1.下载extexcel文件包,这里可以下载http: ...
- ext.net 2.5 导出excel的使用方法
前台页面的导入,导出 <ext:FileUploadField ID="FileUploadField_Import" runat="server" Bu ...
- thinkphp导入导出excel表单数据
在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...
- 导出Excel实现 (ASP.NET C# 代码部分)
背景: 实现导出Excel功能. 技术: ASP.NET , 采用`Aspose.Cells`第三方组件, C# 实现通用部分. 根据前台Ext Grid完成导入Excel中文列与实际存储列的对应关 ...
- Oracle导出excel
oracle导出excel(非csv)的方法有两种,1.使用sqlplus spool,2.使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件: ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)
自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- asp.net mvc4使用NPOI 数据处理之快速导出Excel文档
一.背景 在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高. 二.问题分析 鉴于用户只要求最终将数据库中的数据导出excel,对于格 ...
随机推荐
- linux服务管理 服务启动和自启动
服务启动和自启动 '服务启动' 就是在当前系统中让服务运行,并提供功能 '服务自启动' 自启动是指服务在系统开机或重启动之后,随着启动系统的启动而自动启动服务 服务自启动 [root@ssgao198 ...
- 脚本自动部署及监控 web
1.编写脚本自动部署反向代理.web.nfs: I.部署nginx反向代理两个web服务,调度算法使用加权轮询 II.所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性: ...
- day059 ajax初识 登录认证练习
ajax初识 ajax有两个特点: 一个是异步,另一个是浏览器页面局部刷新(这个特点是用户感受不到的时候进行的) 示例: 页面输入两个整数,通过AJAX传输到后端计算结果并返回 在HTML文件中: & ...
- [Leetcode 90]求含有重复数的子集 Subset II
[题目] Given a collection of integers that might contain duplicates, nums, return all possible subsets ...
- caffe matlab matcaffe 加载输入网络net时报错
http://blog.csdn.net/xiaojiajia007/article/details/72850247
- centos7下zabbix4.0配置磁盘IO监控
一:准备 1.1:安装sysstat yum -y install sysstat 1.2:安装zabbix-get yum install -y zabbix-get.x86_64 1.3:iost ...
- Linux下的5种I/O模型(转)
Linux下的五种I/O模型: l 阻塞I/O l 非阻塞I/O l I/O复用(select.poll.epoll) l 信号驱动I/ ...
- My SQL随记 002 登陆
如何启动MySQL服务 Step1 我的电脑右键属性找到 控制面板 选择 系统和安全 Step2 管理工具中找到服务 Step3 找到你的MySQL启动服务 如何通过黑窗口登陆退出 MySQL Ste ...
- 学号 20175223 《Java程序设计》第1周学习总结
学号 20175223 <Java程序设计>第1周学习总结 教材学习内容总结 第一章要点: 要点1:Java的三大平台:Java SE,Java EE,Java ME. 要点2:Java的 ...
- 18-09-20 关于Xlwings读写基础1
一 利用xlwings 读取Excel 的读取修改数据 import xlwings as xw""" # 1. 读一个已存在的Excel文件:利用xlwings 读取E ...