Java导出excel文件
需求
将每个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文件相关推荐
- Java导出excel文件以.xlsx后缀结尾,可设置部分单元格只读
前言 最近在做一个小项目,有个模块的功能涉及到excel的导入导出,并且要求对导出的excel文件部分列和单元格设置为只读不可更改,在网上到处查找了一番资料,结合自己的想法,发现也并不难,这里整理记录 ...
- java导出excel文件(标题为中文乱码)
1 Java导出Excel文件 function excelOut(){ window.location.href="../getFileToExcel/"+taskId; } ...
- Java 导出 Excel 文件
目前,很多报表,都需要导出Excel文件 首先,maven <dependency><groupId>org.apache.poi</groupId><art ...
- java导出excel文件,设置单个单元格内字段不同样式
最近在做文件模板下载,有需求提出,部分字段需要使用*来标明必填,而且必须是红色,因此,在网上百度之后,终于找到参考文档,参考地址贴在最后. public static void main( Strin ...
- java导出excel文件内容中文乱码解决
记录一个excel导出中发现的问题. 最近使用了EasyExcel这个工具类进行excel的导出,这个类很方便,配合注解和封装的方法,可以很容易的对需要导出的excel或者已有的excel进行行列或者 ...
- java导出excel文件_POI生成EXCEL文件
一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头(head),数据(data ...
- java导出excel文件到服务器,javaexcel导出到远程服务器
javaexcel导出到远程服务器 内容精选 换一换 您可以在CDN控制台的"统计分析 > 状态码统计"页面查看访客对所有域名(如果您开通了企业项目,则已删除域名不支持此功能 ...
- Java poi插件导出Excel文件合并多sheet页
文章目录 一.java导出excel格式文件 二.excel文件多sheet页合并 前言:2020年第一篇文章,就写这两天工作中遇到的这个小需求吧,导出多excel,每个excel有多个sheet页, ...
- java导出excel无法打开
如果你在使用 Java 导出 Excel 文件但是打开后出现了无法打开的问题,可能是出现了以下几种情况: 文件损坏:Excel 文件在生成和传输过程中可能已损坏,导致无法打开. 版本问题:生成的 Ex ...
最新文章
- python识别图片坐标查看器_Opencv/python图像处理后如何获取检测区域的坐标
- mysql 插入记录慢_mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决...
- [转载] Python3中的表达式运算符
- 数论 —— 斐波那契数列(Fibonacci)
- 11.1.1 认识StringBuffer类(1)
- 推荐系统系列教程之十二:Facebook是怎么为十亿人互相推荐好友的?
- 目标检测-20种常用深度学习算法论文、复现代码汇总
- POJ1214 UVA127 Accordian Patience【vector】
- C#网络编程(异步传输字符串) - Part.3
- machine learning-mnist
- Qt QScrollArea 用法 QScrollArea不显示 QScrollArea没铺满
- 如何卸载Windows预安装内置应用
- 平面/球面坐标中已知起点坐标、(偏转)角度、长度求终点坐标(三角函数)
- 带你深入了解Web3开发者堆栈
- Vector、Sort课后题解
- Dynamic Convolution: Attention over Convolution Kernels
- 最in [IN词] 分享
- LINUX保留原分区,linux 分区扩展 (保留数据)
- 海思开发板FFmpeg+Nginx,推流RTMP播放(优秀教程收集+实操整理)
- 手机QQ文件存储位置