1,引入所用的包

 <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.5-FINAL</version>
</dependency>

2,创建列名List,此处将显示到单元格每列名称,根据自己的业务需求更改列名

List<String> columnList = new ArrayList();
columnList.add("申请人账号");
columnList.add("申请人");
columnList.add("提现金额");
columnList.add("开户行");
columnList.add("持卡人");
columnList.add("卡号");
columnList.add("银行名称");
columnList.add("申请时间");

3,创建将要导出的参数(实体类),此处必须和创建的列名List一一对应,否则会错行显示

package com.sanmi.active.fission.management.balance.dto;

import lombok.Data;

import java.math.BigDecimal;
import java.sql.Timestamp; /**
* @author:Ziggo Xu <br/>
* <p>提现管理导出参数</p>
* ===============================
* Date:2018/12/12
* Time:16:55
* ================================
*/
@Data
public class UserBalanceCashExcelDTO {
/**
* 申请人账户
*/
private String account;
/**
* 申请人
*/
private String nickName;
/**
* 提现金额
*/
private BigDecimal bcCashMoney;/**
* 开户行名称
*/
private String ubiOpenBank;
/**
* 持卡人姓名
*/
private String ubiRealName;
/**
* 银行卡卡号
*/
private String ubiCardNo;
/**
* 银行卡名称
*/
private String ubiBankName;
/**
* 提现时间
*/
private Timestamp bcCreateTime; }

4,创建导出Excel的工具类

package com.sanmi.active.fission.base.util;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*; public class Tool {
/**
* 导出excel操作
* @param response
* @param columnList 列名
* @param list 内容
* @param title
* @param titlePostion 标题位置
* @throws IllegalAccessException
* @throws IOException
*/
public static void export(HttpServletResponse response, List<String> columnList, List<?> list, String title, Integer titlePostion) throws IllegalAccessException, IOException { response.reset();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
String dateStr = sdf.format(new Date());
Map<String,Object> map=new HashMap<String,Object>();
// 指定下载的文件名
response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xlsx");
// response.setContentType("application/vnd.ms-excel;charset=UTF-8"); XSSFWorkbook workBook = new XSSFWorkbook();
// 在workbook中添加一个sheet,对应Excel文件中的sheet
XSSFSheet sheet = workBook.createSheet(); //列号
int colNum = 0;
//行号
int rowNum = 0;
XSSFRow rowtitle = sheet.createRow(rowNum++);
rowtitle.createCell(titlePostion).setCellValue(title);
XSSFRow rowheader = sheet.createRow(rowNum++);
for(String string:columnList){
rowheader.createCell(colNum++).setCellValue(string);
}
Iterator iterator = list.iterator();
while (iterator.hasNext()){
Object object = iterator.next();
XSSFRow row = sheet.createRow(rowNum++);
colNum=0;
for (Field field : object.getClass().getDeclaredFields()){
field.setAccessible(true);
if (field.getType().isInstance(Timestamp.class)){
row.createCell(colNum++).setCellValue(field.get(object).toString()
.substring(0,field.get(object).toString().indexOf(".")));
}else {
if(field.get(object) == null){
row.createCell(colNum++).setCellValue("");
}else {
row.createCell(colNum++).setCellValue(field.get(object).toString());
}
}
}
}
workBook.write(response.getOutputStream());
}
}

5,业务逻辑处理,使用第三部创建的UserBalanceCashExcelDTO  接收集合参数 

 List<UserBalanceCashExcelDTO> list = balanceCashApplyService.exportApplyList(param);

6,设置文档的标题

   SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String title = "提现申请导出" + "(" + df.format(new Date()) + ")";

7,调用工具类,导出文档

  Tool.export(response, columnList, list, title, 1);

参考代码如下

  /**
* 导出提现信息
*
* @param param
* @throws Exception
* @throws IllegalAccessException
*/
@RequestMapping("/exportApplyList")
public void exportApplyList(UserBalanceCashParam param) throws Exception {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<UserBalanceCashExcelDTO> list = balanceCashApplyService.exportApplyList(param);
String title = "提现申请导出" + "(" + df.format(new Date()) + ")";
List<String> columnList = new ArrayList();
columnList.add("申请人账号");
columnList.add("申请人");
columnList.add("提现金额");
columnList.add("开户行");
columnList.add("持卡人");
columnList.add("卡号");
columnList.add("银行名称");
columnList.add("申请时间");
//导出
Tool.export(response, columnList, list, title, 1);
}

导出效果图示

8,补充读取excel逻辑实现,新建存储实体

package com.sanmi.active.fission.management.balance.dto;

import lombok.Data;

import java.sql.Timestamp;

/**
* @author:Ziggo Xu <br/>
* <p>导出excel 实体类,与 excel列名对应</p>
* ===============================
* Date:2019/04/12
* Time:16:55
* ================================
*/
@Data
public class ExcelEntity{
//患者id
private String id;
//患者名称
private String name;
//患者检查类型标识 CT MR US 病理
private String flag;
//患者报告内容
private String content;
//分析结果
private String result; }

9,补充读取excel逻辑实现,读取方法

    public static void begin(HttpServletResponse response) throws Exception {
Workbook wb =null;
Sheet sheet = null;
Row row = null;
List<Map<String,String>> list = null;
List<ExcelEntity> entitys = new ArrayList<ExcelEntity>();
String cellData = null;
//这里设置要读取的原始数据
String filePath = "D:\\潍坊二院数据.xls";
//此处的数据是没有意义的,只是为了读取原始数据的列数(5列),设置失误会导致缺失数据
String columns[] = {"id","name","flag","flagName","content"};
wb = readExcel(filePath);
if(wb != null){
//用来存放表中数据
list = new ArrayList<Map<String,String>>();
//获取第三个sheet
sheet = wb.getSheetAt(2);
//获取最大行数
int rownum = sheet.getPhysicalNumberOfRows();
//获取第一行
row = sheet.getRow(0);
//获取最大列数
// int colnum = row.getPhysicalNumberOfCells();
int colnum = 5;//暂定数据,最大五行,其他空白行无意义 ExcelEntity entity = new ExcelEntity();
for (int i = 1; i<rownum; i++) {
Map<String,String> map = new LinkedHashMap<String,String>();
row = sheet.getRow(i);
if(row !=null){
for (int j=0;j<colnum;j++){
cellData = (String) getCellFormatValue(row.getCell(j));
map.put(columns[j], cellData);
}
}else{
break;
}
list.add(map);
//entitys.add(entity);
}
}
//遍历解析出来的list
for (Map<String,String> map : list) {
String flag = null;
String content;
JSONArray jsonArry = null;
String id = null;
ExcelEntity entity = new ExcelEntity();
for (Entry<String,String> entry : map.entrySet()) {
// System.out.print(entry.getKey()+":"+entry.getValue()+",");
//检查类型
if(entry.getKey().equals("flag")) {
flag = entry.getValue();
entity.setFlag(entry.getValue());
}
//检查的内容
if(entry.getKey().equals("content")) {
content = entry.getValue();
content = "[{'content':'"+content+"','pat_in_hos_id':'"+id+"','study_bodypart':'test','time':'2019-03-01 12:05:00'}]";
if(!EmptyUtil.isEmpty(content)) {
jsonArry =JSONArray.fromObject(content);
}
entity.setContent(content);
}
//检查患者的Id
if(entry.getKey().equals("id")) {
id = entry.getValue();
entity.setId(id);
}
//检查患者的名称
if(entry.getKey().equals("name")) {
entity.setName(entry.getValue());
}
}
entity.setResult("测试结果");
entitys.add(entity);
}
//读取方法完成,已封装为list实体!!!!!!
System.out.println(entitys.size());
}

Java 使用Apache POI读取和写入Excel表格的更多相关文章

  1. Java使用POI读取和写入Excel指南

    Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...

  2. Java使用POI读取和写入Excel指南(转)

    做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0 ...

  3. JAVA读取、写入Excel表格(含03版)

    引言 工作中可能会遇到对Excel读取和写入,如果我们自己手动写的话,会很麻烦,但是Apache中有poi工具类.poi工具类封装好了对于Excel读取和写入,我们需要用的时候,直接调用该方法就好了. ...

  4. java使用org.apache.poi读取与保存EXCEL文件

    一.读EXCEL文件 package com.ruijie.wis.cloud.utils; import java.io.FileInputStream; import java.io.FileNo ...

  5. Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

  6. 利用Apache POI 实现简单的Excel表格导出

    1.利用POI API实现简单的Excel表格导出 首先假设一个学生实体类: package com.sun.poi.domain; import java.io.Serializable; impo ...

  7. 《程序实现》从xml、txt文件里读取数据写入excel表格

    直接上码 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java ...

  8. JXL读取写入excel表格数据

    问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...

  9. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

随机推荐

  1. Swiper双向轮播

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. 排查在 Azure 中创建新 Linux 虚拟机时遇到的 Resource Manager 部署问题

    本文内容 常见问题 收集活动日志 问题:自定义映像:预配错误 问题:自定义/库/应用商店映像:分配失败 后续步骤 尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. ...

  3. redis复制集(sentinel)

    https://www.jianshu.com/p/45ffd2a84143 内核配置 cat >> /etc/rc.local << EOF echo never > ...

  4. UIRecorder安装与使用

    继vue单元测试,将进行vue的e2e测试学习. 学习点: 安装uirecorder 用工具(UI Recorder)录制测试脚本 测试脚本的回放 本文意在安装UI Recorder,并且利用该工具进 ...

  5. Selenium2学习(十七)-- js处理日历控件(修改readonly属性)

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  6. Jquery的部分插件

    jQuery Easing:jQuery 动画效果扩展 jQuery Migrate:jQuery 应用迁移辅助插件Modernizr:专为HTML5和CSS3开发的功能检测类库jQuery Flex ...

  7. June 16th 2017 Week 24th Friday

    Progress is the activity of today and the assurance of tomorrow. 进步是今天的活动,明天的保证. The best preparatio ...

  8. 如何读写json文件

    代码如下: import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io. ...

  9. Andriod ADB Interface驱动安装失败Configure USB Debug for Android

    介绍: Linux或Apple或OS X ,已经安装了USB驱动调试为Android的帮助,确认您的Android USB调试连接配置和正常工作. Windows下需要自己手动下载驱动安装或者通过下载 ...

  10. OC 枚举

    void test() { // 定义一种枚举类型 enum Season {spring, summer, autumn, winter}; // 定义一个枚举变量s enum Season s = ...