项目笔记:导出Excel功能
1、前台这块:
var ids="";
$.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do",function(res){
ids=res;
})
//创建Excel表
function btn_createExcel(){
ids=ids.replace("[","").replace("]","");
var data=ids.split(",");
var newAction ='/assets/unRegDeviceAction_createExcel.do?ids='+data;
createFun( newAction );
}
function createFun( newAction ){
if($.checkSession()){
var $form = $("#excelForm");
var action = "";
try {
action = $form.attr("action");
$form.attr("action","${basePath}"+newAction).submit();
}finally{
$form.attr("action",action);
}
}
}
/**
* 获取当前查询结果的设备的所有id
* @return
*/
public void getDeviceIds(){
List<String> ids= new ArrayList<String>();
if(queryBean == null){
queryBean = new UnRegDeviceQueryBean();
}
//-------数据过滤ST
log.info("数据过滤-ST");
@SuppressWarnings("unchecked")
Map<String, List<String>> mgrOrgMap = (Map<String, List<String>>) getSession().getAttribute(OrganizationUtil.ORG_MGR);
if(!OrganizationUtil.isNullMgrOrg(mgrOrgMap)){
Organization mgrOrg = new Organization();
mgrOrg.setMgrOrg(mgrOrgMap);
queryBean.setOrganization(mgrOrg);
} List<UnRegDevice> list= unRegDeviceService.query(queryBean);//查找UnRegDevice实体集合
for(UnRegDevice unRegDevice:list){
ids.add(unRegDevice.getId());
} print(ids.toString());
}
2、后台这块:
/*导出EXCEL*/
@SuppressWarnings("unused")
public void createExcel() {
log.info("导出Excel功能已经启动-BEGIN");
JxlUtil jsl = new JxlUtil();
List<UnRegDevice> dataList =new ArrayList<UnRegDevice>();
List<UnRegDeviceExport> list = new ArrayList<UnRegDeviceExport>();
List<Organization> organizations = null;
// 构建路径
String downLoadPath = "/WEB-INF/download/asset/";
String rootPath = getServletContext().getRealPath(downLoadPath);
String fileName = "";
File file=new File(rootPath); try {
if(!(file.exists()||file.isDirectory())){
file.mkdirs();
} if (null != getRequest().getParameter("ids")) {
String ids[] = getRequest().getParameter("ids").split(",");
for (int i = ; i < ids.length; i++) {
unRegDevice = unRegDeviceService.queryById(ids[i].replaceAll(" +",""));
dataList.add(unRegDevice);
}
}
if(dataList!=null){
for (UnRegDevice unRegDevice : dataList) {
UnRegDeviceExport unRegDeviceExport= new UnRegDeviceExport();
if(null!=unRegDevice.getId()){
unRegDeviceExport.setId(unRegDevice.getId());
}
if(null!=unRegDevice.getIp()){
unRegDeviceExport.setIp(unRegDevice.getIp());
}
if(null!=unRegDevice.getMac()){
unRegDeviceExport.setMac(unRegDevice.getMac());
}
if(null!=unRegDevice.getOrganization()){
log.info("获取设备全路径组织机构-ST");
Organization organization=unRegDevice.getOrganization();
String Aname =organization.getName();
String name= getAname(organization, Aname);
log.info("获取设备全路径组织机构-END--name:"+name);
unRegDeviceExport.setOrganizationName(name);
}
if(null!=unRegDevice.getHostName()){
unRegDeviceExport.setHostName(unRegDevice.getHostName());
}
if(null!=unRegDevice.getGroupName()){
unRegDeviceExport.setGroupName(unRegDevice.getGroupName());
}
if(null!=unRegDevice.getProtectState()){
unRegDeviceExport.setProtectState(unRegDevice.getProtectState());
}
if(null!=unRegDevice.getUpdateTime()){
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=dateFormater.format(unRegDevice.getUpdateTime());
unRegDeviceExport.setUpdateTime(time);
}
if(null!=unRegDevice.getIsOpened()){
unRegDeviceExport.setIsOpened(unRegDevice.getIsOpened());
}
if(null!=unRegDevice.getIsFireWall()){
unRegDeviceExport.setIsFireWall(unRegDevice.getIsFireWall());
}
list.add(unRegDeviceExport);
}
}
log.info("数据过滤--END"); String interBase = "sys.column.name.unRegDevice";
String inter_value_key = "#isOpened#isFireWall#protectState#";
String[] inter_value_ary = { "isOpened.0", "isOpened.1","isFireWall.0", "isFireWall.1","protectState.0", "protectState.1"}; fileName = jsl.getInter(interBase.replace("column", "table"))
+ new Date().getTime();
String targetfile = rootPath + System.getProperty("file.separator")
+ fileName + ".xls";
// 创建可写入的Excel工作薄
WritableWorkbook wwb;
wwb = Workbook.createWorkbook(new File(targetfile));
// 创建Excel工作表
WritableSheet ws = wwb.createSheet("未注册设备", ); // 获取需要内容国际化的字段
jsl.creatCemsExcel(ws, list, interBase, inter_value_key,inter_value_ary); // 写入Exel工作表
wwb.write();
// 关闭Excel工作薄对象
wwb.close();
getResponse().setContentType(getServletContext().getMimeType(fileName));
getResponse().setHeader("Content-Disposition", "attachment;fileName="+new String(fileName.getBytes("gb2312"), "ISO8859-1")+".xls");
String fullFileName = getServletContext().getRealPath(downLoadPath + fileName+ ".xls");
InputStream in = new FileInputStream(fullFileName);
OutputStream out = getResponse().getOutputStream();
int b;
while((b=in.read())!= -){
out.write(b);
}
in.close();
out.close();
/* ServletActionContext.getRequest().setAttribute("downLoadPath",
downLoadPath);
ServletActionContext.getRequest().setAttribute("fileName",
fileName + ".xls");*/
this.msg = RESULT_SUCCESS;
log.info("导出EXCEL提示信息为:"+this.msg);
} catch (Exception e) {
log.error("export excel error:" + e.getMessage());
log.error("导出EXCEL失败");
}
log.info("导出Excel功能已经启动-END");
log.info("导出Excel功能已经启动-END");
/*return "downLoadUI";*/
} /*递归获取全路径组织机构方法*/
public String getAname(Organization organization, String oName){
log.info("递归获取全路径组织机构方法-ST");
if( organization.getParent()!=null){
String tName="";
tName=organization.getParent().getName()+"/"+oName;
log.info("递归获取全路径组织机构方法-END");
return getAname(organization.getParent(), tName);
}else{
log.info("递归获取全路径组织机构方法-END");
return oName;
}
}
public void creatCemsExcel( WritableSheet ws, List<?> beanList, String internationalBase,
String value_str, String[] inter_value_ary ) throws Exception {
// -----------获取资源阶段----------------------------------------------------------------
String[] ary = internationalBase.split("\\.");
String beanName = ary[ary.length - ];
// 获得bean值(systable中保存的key)
beanName = beanName.substring(, ).toUpperCase()+ beanName.substring(, beanName.length());
// 获得要展现的字段名
ArrayList<String> key_list = getBeanKeys(beanName);
// 获取key的国际化用于国际化head
Map<String, String> key_inter = getInter(internationalBase, key_list);
// 获得需要国际化内容的Map
Map<String, String> interValueMap = getInter(internationalBase,inter_value_ary);// {ret.1=安装, ret.0=未安装}
// 标题
String title = getInter(internationalBase.replace("column", "table")); // -----------文件创建阶段----------------------------------------------------------------
try {
JSONArray json=getColumnLength(beanList, key_list);
// 写入表头 合并 (列 ->行 列->行)
ws.mergeCells(, , key_list.size() - , );
ws.addCell(new Label(, , title, wcf_title));
int startHead = ;
// 写入head
for (int i = ; i < key_list.size(); i++) {
ws.addCell(new Label(i, startHead, key_inter.get(key_list.get(i)), wcf_head));
for (int j = ; j < json.size(); j++) {
JSONObject jsonObj=json.getJSONObject(i);
if(jsonObj.get(key_list.get(i))!=null){
ws.setColumnView(i, Integer.parseInt(jsonObj.getString(key_list.get(i)))+);
}
}
} // 写入data
for (int i = , size = beanList.size(); i < size; i++) {// 循环行
for (int colNum = ; colNum < key_list.size(); colNum++) {// 循环列
HashMap<String, String> queryBeanMap = BeanReflect.beanToMap(beanList.get(i)); if (value_str == null || value_str.equals("")) {// 没有内容需要国际化
ws.addCell(new Label(colNum, startHead + i + ,queryBeanMap.get(key_list.get(colNum)),wcf_centre));
} else {
if (value_str.indexOf(("#" + key_list.get(colNum) + "#")) > -) {// 如果输入内容需要国际化
// 需要国际化
String interValue = interValueMap.get(key_list.get(colNum)+ "."+ queryBeanMap.get(key_list.get(colNum)));
ws.addCell(new Label(colNum, startHead + i + ,interValue, wcf_centre));
} else {
ws.addCell(new Label(colNum, startHead + i + ,queryBeanMap.get(key_list.get(colNum)),wcf_centre));
}
}
}
} // 写入结尾
ManagerSession managerSession = ManagerSessionUtils.getManagerSession(ServletActionContext.getRequest().getSession());
String niceName=getInter("sys.column.name.baseLog.creater")+" : "+managerSession.getNiceName();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
String time=getInter("sys.column.name.baseLog.createTime")+" : "+sdf.format(new Date());
ws.addCell(new Label(key_list.size()-, beanList.size()+, niceName, wcf_feet));
ws.addCell(new Label(key_list.size()-, beanList.size()+, time, wcf_feet));
/*if("DeviceIllegalConnectLog".equals(beanName)){
String msgName="违规外联日志导入必填项:{使用人 ,所属机构 ,MAC地址 ,设备名称, IP地址 ,发生时间, 存档时间,设备注册人账号,使用人账号}:注,***作为模板导入的时候请删除该提示行***";
ws.addCell(new Label(key_list.size()-16, beanList.size()+4, msgName, wcf_feet));
}*/
} catch (Exception e) {
e.printStackTrace();
}
}
// systable.xml中的展现key
private static ArrayList<String> getBeanKeys(String beanName) {
HttpServletRequest request = ServletActionContext.getRequest();
Map<?, ?> keyMap = (Map<?, ?>) request.getSession(false)
.getServletContext().getAttribute("vrvSysTablesAttr");
ArrayList<String> list = new ArrayList<String>();
SysTable sysTable = (SysTable) keyMap.get(beanName);
Set<SysColumn> set = sysTable.getColumns();
Iterator<SysColumn> it = set.iterator();
while (it.hasNext()) {
SysColumn column = it.next();
// 如果显示
if (column.getIsExport().toString().equals("Y")) {
list.add(column.getKey());
}
}
return list;
}
项目笔记:导出Excel功能的更多相关文章
- 公司项目笔记-导出excel
一.asp.net中导出Excel的方法: 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览 ...
- 项目笔记:导出Excel功能分sheet页插入数据
导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...
- vue项目导出EXCEL功能
因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
- Vue通过Blob对象实现导出Excel功能
不同的项目有不同的导出需求,有些只导出当前所显示结果页面的表格进入excel,这个时候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js来实现导出Exc ...
- 【angularjs】pc端使用angular搭建项目,实现导出excel功能
此为简单demo. <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset= ...
- spring mvc项目中导出excel表格简单实现
查阅了一些资料,才整理出spring mvc 项目导出excel表格的实现,其实很是简单,小计一下,方便以后查阅,也希望帮助有需要的朋友. 1.导入所需要依赖(Jar包).我使用的是maven,所以坐 ...
- 导出Excel功能的3种实现
项目中总会用到Excel的导出功能,接触过好几个项目,发现有个项目的导出实现特别值得学习.这里学习顺带总结一下. 一.三种方法 我遇到的导出目前有3种处理: 每个功能一个导出方法: 写一个通用的Exp ...
- layui + mvc + ajax 导出Excel功能
为了更方便,没基础的伙伴更容易理解,我尽量详细简便 省了很多代码,一步一步的试 自己引入文件 1. html 前端视图代码 Layui的数据绑定 全部代码 @{ Layout = null; } &l ...
随机推荐
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- Swift 闭包(六)
http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...
- python--opencv模块
1.图片的读取与展示 #!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数,一个是文件名 ...
- [ MongoDB ] 副本集的搭建及测试
Replica Sets 复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图:
- 【 Nginx 】proxy_cache 模块的使用记录
部署环境:nginx + tomcat 同一台服务器. 通过nginx反向代理tomcat. 配置如下: user www www; worker_processes auto; error_log ...
- 【 VSFTPD 】ftp 客户端问题
网络环境: 两个独立的内网环境,前端都有路由和防火墙的管控.要在这两个独立的内网使用ftp通过互联网进行通信. 首先,ftp server 服务端口默认修改为:2100 数据端口修改为:21000 将 ...
- Plain Old Data (POD)
Plain Old Data (POD) POD指的是这样一些数据类型:基本数据类型.指针.union.数组.构造函数是 trivial 的 struct 或者 class. POD用来表明C++中与 ...
- Android 用AsyncTask下载网络图片并显示百分比
1.添加布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ...
- 关于docker swarm有满满干货的一篇文章,讲了如何用service来作nginx负责proxy已级无缝升级策略
http://www.cnblogs.com/atuotuo/p/6260591.html ================================= $docker network crea ...
- Nodejs获取Azure Active Directory AccessToken
因为现有的代码已经迁入至Azure中,并且受AD保护,所以在获取数据时,需要传入Token后才可以获取到数据,那么第一步肯定是需要先提取到token var adal = require('adal- ...