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. javascript对象(2)

    这个对象,不是那个对象.续更第二篇.. 昨天说了对象的基本概念以及创建,今天来说一下它的其他方法: 1.访问属性的两种方式:点语法.[]语法 var dog =new Object(); dog.na ...

  2. 正则表达式备忘录-Regular Expressions Cheatsheet中文版

    正则表达式备忘录Regular Expressions Cheatsheet中文版原文:https://www.maketecheasier.com/cheatsheet/regex/ 测试文件a.t ...

  3. C++之不带指针类的设计——Boolean

    经典的类设计分类 带指针类 不带指针类 Header文件的布局 #ifndef __COMPLEX__ #define __COMPLEX__ #include <iostream.h> ...

  4. Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?

    Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间 ...

  5. Shell脚本批量修改图片尺寸

    #!/bin/sh function scandir(){ local cur_dir parent_dir workdir workdir=$ cd ${workdir} if [ ${workdi ...

  6. Python 列表排序方法reverse、sort、sorted操作方法

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  7. Oracle 11.1.0.6 导入导出bug

    实验环境: 11.1.0.6.0   对ANONYMOUSUSER_ALL表中分区进行备份 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PA ...

  8. 到底哪种类型的错误信息会阻止business transaction的保存

    当试图在CRM WebUI保存一个business transaction比如Opportunity时,可能会遇到各种各样的错误消息.有的错误消息会阻止Business transaction被sav ...

  9. Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired,

    Did not receive a reply. Possible causes include: the remote application did not send a reply, the m ...

  10. Django:视图

    Django的View(视图) 一,一个简单的视图 下面是一个以HTML文档的形式返回当前日期和时间的视图: from django.http import HttpResponse import d ...