需求

将每个xmpp机房的在线/离线用户信息导出到Excel表格中(定时任务+网页按钮),并在网页上提供下载按钮进行下载。

效果预览

                                            导出文件效果

                                            点击下载弹出框效果

代码总览

/** "..."为公司业务代码,大多为从缓存或者数据库中获取导出数据,不影响导出功能。

  • 前端写法为公司框架,理解大致意思就好。

*/
一、工具类:生成excel对象wb [1]

package com.onewaveinc.utils;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import com.onewaveinc.mip.log.Logger;
import com.onewaveinc.user.entity.UserInfo;
/*** 生成Excel文件工具类* @author wxin**/
public class ExcelUtil {private static Logger logger = Logger.getInstance(ExcelUtil.class);/*** 导出Excel* @param sheetName sheet名称* @param title 标题* @param values 内容* @param wb HSSFWorkbook对象* @return*/public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,List<UserInfo> valueList, HSSFWorkbook wb){// 第一步,创建一个HSSFWorkbook,对应一个Excel文件if(wb == null){wb = new HSSFWorkbook();}// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制HSSFRow row = sheet.createRow(0);// 第四步,创建单元格,并设置值表头 设置表头居中HSSFCellStyle style = wb.createCellStyle();// 创建一个居中格式style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //声明列对象HSSFCell cell = null;//创建标题for(int i=0;i<title.length;i++){cell = row.createCell((short) i);cell.setCellValue(title[i]);cell.setCellStyle(style);}//创建内容if (null != valueList && valueList.size() > 0) {for(int i=0;i<valueList.size();i++){row = sheet.createRow(i + 1);UserInfo userInfo = valueList.get(i);String []userInfoArray = {userInfo.getLoginName(),userInfo.getStbMac(),userInfo.getLoginIp(),userInfo.getServerDomain(), userInfo.getTerminalModel(),userInfo.getTerminalVersion(),userInfo.getServerIp(),    userInfo.getUpdateTime(),userInfo.getLoginTime()};for(int j=0;j<userInfoArray.length;j++){//将内容按顺序赋给对应的列对象row.createCell((short) j).setCellValue(userInfoArray[j]);}}} else {logger.error("用户信息无数据");}return wb;}
}

二、生成excel文件方法[1]

    public void run() throws InterruptedException, IOException {ExportExcel();}/*** 定时导出XMPP每个机房(一个集群)的在线用户的信息* 导出信息:用户账号,mac地址,登陆的IP,登陆域名,机顶盒的型号,版本,和以及登陆所在节点的ip,* 显示 登陆的时间,登陆的时长(现在的时间减去登陆的时间)。*/public  String ExportExcel() {String result = "";try {...result = ImportDataExcel(offlineUserInfoList, serverName, false);logger.info("**此次处理离线结果为:"+result);...} catch (Exception e) {result = "failed";e.printStackTrace();}return result;}/*** 导出用户信息数据到Excel表格* @param userInfoList* @return msg “failed” or “success”*/public String ImportDataExcel(List<UserInfo> userInfoList, String serverName , boolean isOnline) {String msg = "";String fileName = "";String sheetName = "";String[] title = {"用户账号","mac地址","登陆IP","登陆域名","机顶盒型号", "机顶盒版本","登录所在节点的IP", "登陆时间", "登陆时长"};//设置日期格式SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");// new Date()为获取当前系统时间,也可使用当前时间戳String date = df.format(new Date());if (isOnline) {fileName = serverName+"-online-usersInfo-"+date+".xls";sheetName = serverName+"在线用户信息表";} else {fileName = serverName+"-offline-usersInfo-"+date+".xls";sheetName = serverName+"离线用户信息表";}HSSFWorkbook wb = new HSSFWorkbook();wb = ExcelUtil.getHSSFWorkbook(sheetName, title, userInfoList, null);ByteArrayOutputStream os = new ByteArrayOutputStream();try{wb.write(os);}catch (IOException e){msg = "failed";e.printStackTrace();}byte[] content = os.toByteArray();//Excel文件生成后存储的位置。File file = new File(path+"/"+fileName);OutputStream fos  = null;try{fos = new FileOutputStream(file);fos.write(content);os.close();fos.close();if ("".equals(msg)) {msg = "success";}logger.info("生成用户信息Excel表格成功:"+ fileName);}catch (Exception e){msg = "failed";logger.error("生成用户信息Excel表格失败:"+ fileName);e.printStackTrace();}return msg;}

三、SpringMVC

@SuppressWarnings("deprecation")
@Resource("userLoginService")
@Bean("contbiz.imoss.userloginservice")
public class UserChannelLoginService {
...@Post@Path("exportExcel")public String ExportExcel() {String result = "";result = exportXMPPUserInfo.ExportExcel();return result;}
...
}

四、配置文件

#导出文件路径:导出XMPP各个机房的在线用户信息Excel表,
#<require>
/spring/config.properties|xmpp.export.excel.path=D:\Doc\test111#定时任务时间:导出XMPP各个机房的在线用户信息Excel表,
#<require>
/spring/config.properties|xmpp.export.excel.time=0 44,45,46,47 20 11 * ?
<!-- 指定执行的目标类、方法 --><bean id="autoSmsB2cJobDetail"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><!-- 指定任务类 --><property name="targetObject" ref="contbiz.imoss.exportXMPPUserInfo" /><!--  指定任务方法 --><property name="targetMethod" value="run" /><property name="concurrent" value="false" /></bean><!-- 设置执行任务以及时间 --><bean id="autoSmsB2cJobDetailCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><ref bean="autoSmsB2cJobDetail" /></property><property name="cronExpression"><value>${xmpp.export.excel.time}</value></property></bean><!-- 启动定时器 --><bean id="ssschedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"><property name="triggers"><list><!-- <ref bean="autoSmsB2cJobDetailSimpleTrigger" /> --><ref bean="autoSmsB2cJobDetailCronTrigger" /></list></property></bean>

五、前端

/**前端写法为公司框架,理解大致意思就好。*/...
<input id="exportExcel" type="submit" value="导出" />
...
<script>//导出excelW.$('exportExcel').on('click',function(e){    W.create('userLoginService/exportExcel').done(function(result){if (result == "success") {W.alert("导出所有在线/离线用户成功");} else {W.alert("导出所有在线/离线用户失败");}});});
</script>

引用

[1] https://www.cnblogs.com/gudon... JAVA导出EXCEL表格

Java导出excel文件相关推荐

  1. Java导出excel文件以.xlsx后缀结尾,可设置部分单元格只读

    前言 最近在做一个小项目,有个模块的功能涉及到excel的导入导出,并且要求对导出的excel文件部分列和单元格设置为只读不可更改,在网上到处查找了一番资料,结合自己的想法,发现也并不难,这里整理记录 ...

  2. java导出excel文件(标题为中文乱码)

    1 Java导出Excel文件 function excelOut(){   window.location.href="../getFileToExcel/"+taskId; } ...

  3. Java 导出 Excel 文件

    目前,很多报表,都需要导出Excel文件 首先,maven <dependency><groupId>org.apache.poi</groupId><art ...

  4. java导出excel文件,设置单个单元格内字段不同样式

    最近在做文件模板下载,有需求提出,部分字段需要使用*来标明必填,而且必须是红色,因此,在网上百度之后,终于找到参考文档,参考地址贴在最后. public static void main( Strin ...

  5. java导出excel文件内容中文乱码解决

    记录一个excel导出中发现的问题. 最近使用了EasyExcel这个工具类进行excel的导出,这个类很方便,配合注解和封装的方法,可以很容易的对需要导出的excel或者已有的excel进行行列或者 ...

  6. java导出excel文件_POI生成EXCEL文件

    一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头(head),数据(data ...

  7. java导出excel文件到服务器,javaexcel导出到远程服务器

    javaexcel导出到远程服务器 内容精选 换一换 您可以在CDN控制台的"统计分析 > 状态码统计"页面查看访客对所有域名(如果您开通了企业项目,则已删除域名不支持此功能 ...

  8. Java poi插件导出Excel文件合并多sheet页

    文章目录 一.java导出excel格式文件 二.excel文件多sheet页合并 前言:2020年第一篇文章,就写这两天工作中遇到的这个小需求吧,导出多excel,每个excel有多个sheet页, ...

  9. java导出excel无法打开

    如果你在使用 Java 导出 Excel 文件但是打开后出现了无法打开的问题,可能是出现了以下几种情况: 文件损坏:Excel 文件在生成和传输过程中可能已损坏,导致无法打开. 版本问题:生成的 Ex ...

最新文章

  1. python识别图片坐标查看器_Opencv/python图像处理后如何获取检测区域的坐标
  2. mysql 插入记录慢_mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决...
  3. [转载] Python3中的表达式运算符
  4. 数论 —— 斐波那契数列(Fibonacci)
  5. 11.1.1 认识StringBuffer类(1)
  6. 推荐系统系列教程之十二:Facebook是怎么为十亿人互相推荐好友的?
  7. 目标检测-20种常用深度学习算法论文、复现代码汇总
  8. POJ1214 UVA127 Accordian Patience【vector】
  9. C#网络编程(异步传输字符串) - Part.3
  10. machine learning-mnist
  11. Qt QScrollArea 用法 QScrollArea不显示 QScrollArea没铺满
  12. 如何卸载Windows预安装内置应用
  13. 平面/球面坐标中已知起点坐标、(偏转)角度、长度求终点坐标(三角函数)
  14. 带你深入了解Web3开发者堆栈
  15. Vector、Sort课后题解
  16. Dynamic Convolution: Attention over Convolution Kernels
  17. 最in [IN词] 分享
  18. LINUX保留原分区,linux 分区扩展 (保留数据)
  19. 海思开发板FFmpeg+Nginx,推流RTMP播放(优秀教程收集+实操整理)
  20. 手机QQ文件存储位置

热门文章

  1. Eclipse报错:The import org.apache cannot be resolved
  2. 图形学的三种拾取实现与比较
  3. 一款APP从设计稿到切图过程全方位揭秘 Mark
  4. java for循环迭代_Java for循环棘手迭代
  5. 1. Pycharm新建项目
  6. (4.3)进程管理之线程
  7. 国内怎么使用chatGpt
  8. 十六、Swift 可选值链条 Optional Chaining
  9. 初识SafetyNet简要梳理
  10. windows插耳机没声音?