利用ExtJS导出Excel
Ext.ns("Msp.Component");
//config = {
// fileName : "净值及头寸核对",
// exportDate : "2014-01-20",
// dataSource : [
// {grid : grid1, param : param1, showType : true},
// {grid : grid2, param : param2, showType : false}
// ],
// hiddenColumnArr : ["assetName"],
// isMail : true,
// filePath : "C:\\mspMail\\"
//}
Msp.Component.PageToExcel = function(config){
this.initialConfig = config;
this.excel = null;
this.workBook = null;
this.sheet = null;
//是否发送邮件
this.isMail = false;
//如果是发送邮件,生成excel附件的存放目录
this.filePath = "C:\\mspMail\\";
//导出日期,默认为当天
this.exportDate = getCurDate();
//定时执行垃圾回收的标识
this.idTmr = "";
this.dataSource = [];
//过滤自定义不显示的列
this.hiddenColumnArr = ['checked','checkerId','checkTime'];
Ext.apply(this,config);
};
Msp.Component.PageToExcel.prototype = {
/**
* 创建excel对象
*/
createExcel : function(){
try{
this.excel = new ActiveXObject("Excel.Application");
//控制execl是否打开 true 打开 ,false 不打开
this.excel.Visible = false;
this.workBook = this.excel.Workbooks.Add();
this.sheet = null;
}catch(e){
sofa.alert("请确认安装了非绿色版本的excel!"+e.description);
}
},
/**
* 关闭excle对象
*/
closeExcel : function(){
if(this.workBook != null){
this.workBook.Close(SaveChanges=false);
}
if(this.excel != null){
this.excel.Quit();
}
this.workBook = null;
this.sheet = null;
//EXCEL.EXE进程清理
this.idTmr = window.setInterval(this.cleanup,1);
},
/**
* EXCEL.EXE进程清理
*/
cleanup : function(){
window.clearInterval(this.idTmr);
window.CollectGarbage();
},
/**
* 默认的sheet不够用时,添加额外的sheet
*/
addSheetsExt : function(){
//默认的sheet数量,经测试win7默认3个sheet,xp默认1个sheet
var defaultSheetNum = this.workBook.Sheets.count,
count = 0;//需要sheet的个数
for(var i = 0; i < this.dataSource.length; i++){
//判断是否需要生成新的sheet,如果默认的sheet不够用则生成新的sheet
if(this.dataSource[i].showType){
count++;
if(count > defaultSheetNum){
this.workBook.Sheets.add;
}
}
}
},
/**
* 生成一个excel文件
*/
handleExcel : function(){
if(this.dataSource && this.dataSource.length > 0){
var layerNum = 0,//sheet的层数
rowIndex = 0;//行索引
this.addSheetsExt();
for(var i = 0; i < this.dataSource.length; i++){
if(this.dataSource[i].showType){
layerNum ++;
this.sheet = this.workBook.Worksheets(layerNum);
this.sheet.name = "第【"+layerNum+"】层";
//行索引归零
rowIndex = 0;
}
//生成数据到sheet,并返回当前grid的总记录数
var totalRecords = this.changeGridToExcel(this.dataSource[i].grid,this.dataSource[i].param,this.sheet,rowIndex);
//保存grid查询出来的总记录数,方便以后统计异常记录数
this.dataSource[i].total = totalRecords;
if(totalRecords > 0){
rowIndex = rowIndex + totalRecords + 3;
}
}
}
},
/**
* 构建工作表的标题
* @param {} sheet 工作表
* @param {} rowIndex 行索引
* @param {} colNum 总列数
* @param {} titleName 标题名称
*/
buildTitle : function(sheet, rowIndex, colNum, titleName){
/***************************************标题开始***********************************************/
//合并标题单元格
sheet.Range("A"+(rowIndex+1),sheet.Cells(rowIndex+1,colNum)).MergeCells=true;
//居中显示
sheet.Cells(rowIndex+1,1).HorizontalAlignment=3;
//设置粗体
sheet.Cells(rowIndex+1,1).Font.Bold=true;
//字体大小
sheet.Cells(rowIndex+1,1).Font.Size=15;
//字体颜色
sheet.Cells(rowIndex+1,1).Font.ColorIndex=10;
//模块名称
sheet.Cells(rowIndex+1,1).value = titleName;
/***************************************标题结束***********************************************/
/***************************************导出日期开始*******************************************/
//合并时间单元格
sheet.Range("A"+(rowIndex+2),sheet.Cells(rowIndex+2,colNum)).MergeCells=true;
//居左显示
sheet.Cells(rowIndex+2,1).HorizontalAlignment=2;
//导出日期
sheet.Cells(rowIndex+2,1).value = this.exportDate;
/***************************************导出日期结束*******************************************/
},
/**
* 构建工作表的内容
* @param {} sheet 工作表
* @param {} rowArr 行数组
* @param {} columnArr 列数组
* @param {} rowIndex 行索引
* @return {} 工作表的列数
*/
buildContent : function(sheet, rowArr, columnArr, rowIndex){
//标题行、日期行、表头行占三行
var startIndex = rowIndex + 3;
/***************************************内容设置开始***********************************************/
for (var i = 0;i< rowArr.length; i++){
var count = 1;
for(var j = 0;j< columnArr.length;j++){
//列出不隐藏的列
if(columnArr[j].hidden == undefined && !Ext.isEmpty(columnArr[j].dataIndex) ){
//过滤自定义不显示的列
if(this.hiddenColumnArr && this.hiddenColumnArr.indexOf(columnArr[j].dataIndex) > -1){
continue;
}
//居中显示
sheet.Cells(startIndex+1+i,count).HorizontalAlignment=3;
//边框样式
sheet.Cells(startIndex+1+i,count).Borders.LineStyle=1;
//单元格边框颜色
sheet.Cells(startIndex+1+i,count).Borders.ColorIndex=10;
//将单元置为文本,避免非数字列被自动变成科学计数法和丢失前缀的0
sheet.Cells(startIndex+1+i,count).NumberFormat = "@";
var viewValue = rowArr[i][columnArr[j].dataIndex];
if(columnArr[j].renderer != undefined && !Ext.isEmpty(viewValue)){
//页面渲染时需要使用当前行的数据作为判断条件
var rdata = {};
rdata.data = rowArr[i];
viewValue = columnArr[j].renderer(viewValue,null,rdata);
}
if(viewValue == undefined){
viewValue = '';
}
if(viewValue != null){
viewValue = Ext.util.Format.trim(viewValue.toString());//去空格
}
//viewValue 前面加空格是为了处理 2/2的数据格式,cells默认会理解为日期
sheet.Cells(startIndex+1+i,count).value = " "+viewValue;
count++;
}
}
}
/***************************************内容设置结束***********************************************/
return count - 1;
},
/**
* 构建工作表的列头
* @param {} sheet 工作表
* @param {} columnArr 列头数组
* @param {} rowIndex 行索引
*/
buildHeader : function(sheet, columnArr, rowIndex){
/***************************************列头设置开始***********************************************/
//标题行、日期行、表头行占三行
var startIndex = rowIndex + 3;
var count = 1;
for (var i = 0 ;i < columnArr.length; i++){
//列出不隐藏的列头项并排除序号列和复选框列
if(!columnArr[i].hidden &&
(columnArr[i].header && columnArr[i].header.length>0 && columnArr[i].header != '序号') &&
columnArr[i].id != 'checker'){
//过滤自定义不显示的列
if(this.hiddenColumnArr && this.hiddenColumnArr.indexOf(columnArr[i].dataIndex) > -1){
continue;
}
//居中显示
sheet.Cells(startIndex,count).HorizontalAlignment=3;
//设置粗体
sheet.Cells(startIndex,count).Font.Bold=true;
//列头名称
sheet.Cells(startIndex,count).value = columnArr[i].header;
//边框样式
sheet.Cells(startIndex,count).Borders.LineStyle=1;
//单元格边框颜色
sheet.Cells(startIndex,count).Borders.ColorIndex=10;
//单元格底色
sheet.Cells(startIndex,count).Interior.ColorIndex=2;
count++;
}
}
/***************************************列头设置结束***********************************************/
},
/**
* 将grid的数据写入到sheet中
* @param {} grid 表格
* @param {} param 查询参数
* @param {} sheet 当前工作表
* @param {} rowIndex 行索引,记录写入行的起始位置
* @return {} 总记录数
*/
changeGridToExcel : function(grid, param, sheet,rowIndex){
var totalRecords = 0;
sofa.api.request({
url:grid.url,
params : param,
method:'post',
async:false,
success: function(response){
var rowArr = null;//行数组
if(typeof response.responseText == 'string'){
rowArr = Ext.decode(response.responseText);
}
if(rowArr == null || rowArr.length == 0){
return 0;
}
var columnArr = grid.getColumnModel().config;//列数组
try{
//生成内容
var colNum = this.buildContent(sheet, rowArr, columnArr, rowIndex);
//生成列头
this.buildHeader(sheet, columnArr, rowIndex);
//标题
var titleName = (sheet.name == '第【1】层' ? this.fileName : rowArr[0]['bizName']);
//生成标题
this.buildTitle(sheet, rowIndex, colNum,titleName);
//列自增长
sheet.Columns.AutoFit();
totalRecords = rowArr.length;
}catch(e){
}
},
scope:this
});
return totalRecords;
},
/**
* 保存
*/
saveExcel :function(){
var savePath = null;
//导出发送邮件用的excel文件
if(this.isMail){
//无异常记录不保存
if(this.dataSource[0].total != 0){
savePath = this.filePath+this.fileName+".xls";
if(!Ext.isEmpty(savePath)){
this.sheet.SaveAs(savePath);
}
}
//默认的excel导出
}else{
savePath = this.excel.Application.GetSaveAsFilename(this.fileName+".xls","Excel Spreadshsheets (*.xls),*.xls,(*.xlsx),*.xlsx");
if(!Ext.isEmpty(savePath)){
this.sheet.SaveAs(savePath);
}
}
},
/**
* excel导出
*/
exportExcel : function(){
try{
this.createExcel();
this.handleExcel();
this.saveExcel();
}catch(e){
}finally{
this.closeExcel();
}
}
};
利用ExtJS导出Excel的更多相关文章
- 利用Servlet导出Excel
-----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...
- 利用PHPExcel导出excel 以及利用js导出excel
导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- 利用npoi导出Excel
npoi库是当下最流行的处理Excel.Word.PPT等Office文件格式 npoi的下载地址:http://npoi.codeplex.com/ npoi的官方学习地址: http://www. ...
- C#利用NPOI导出Excel类(简单版)
代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...
- 使用Aspose.Cells利用模板导出Excel(C#)
前言 随着互联网的流行,web项目逐渐占据主流.我相信大部分人开发项目的过程中都写过上传以及导出Excel和Word的功能,本文仅讨论导出Excel.C#中有很多第三方组件支持导出Excel,比如:N ...
- 利用PHPExcel导出Excel并设置Excel格式以及数据源
浏览:23969 发布日期:2013/07/24 分类:技术分享 代码有点长,读起来有点累.先来个截图 导出的Excel太宽了,所以将后面的列宽重新调整了再截的图 功能包括: 1.设置单元格格式,包括 ...
- 利用PHPExcel导出Excel相关设置
功能包括: 1.设置单元格格式,包括单元格边框.单元格高度.单元格宽度 2.合并指定的单元格 3.设置Excel数据源,并将数据源保护起来(这个是为了实现单元格下拉选项功能) 4.设置字体样式 pub ...
随机推荐
- Codeforces Round #353 (Div. 2) C Money Transfers
题目链接: http://www.codeforces.com/contest/675/problem/C 题意: 给一个数组,每个数与他相邻的数相连,第一个与最后一个相连,每个数的数值可以左右移动, ...
- hibernate---核心开发接口1(重点)
面试考这个比较少 a) Session session = sessionFactory.openSession(); 永远都是打开新的 记得要 close b) Session sessio ...
- 一个perfect 的解决 阴影拉伸的方法 shadow map strech
因为在场景中做了,有的物体产生阴影比如人物,有的物体不产生阴影比如地面,这样在地面凹下去的地方,悬崖,池塘边,就会有阴影的拉伸. 实际上, 没办法上传图片.... L是光源 A 点(人物身上)产生阴影 ...
- JAVA算法系列 快速排序
java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...
- openSSL漏洞原理及安全加固
2014年4月8日晚,互联网爆出了又一重量级安全漏洞,即CVE-2014-0160,通俗来讲就是OpenSSL出现了安全漏洞. 说 这个漏洞前,先介绍一下OpenSSL,OpenSSL是一个强大的安全 ...
- win7/8下VirtualBox虚拟Ubuntu共享文件夹设置
实验环境: 主机:win8.1 虚拟机软件:VirtualBox4.3 虚拟的主机:centos6.5 final 亲测可用! 1. 安装增强功能包(VBoxGuestAdditions) 打开虚拟 ...
- Sqli-labs less 55
Less-55 本关的sql语句为: $sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1"; 其余和less54 ...
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- 【面试题043】n个骰子的点数
[面试题043]n个骰子的点数 题目: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s, 输入n,打印出s的所有可能的值出现的概率. n个骰子的总点数,最小为n,最大为6n,根据排列组 ...
- GRID用法(取行、列值;定位选中某行等等)
Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...