内容来源于网络,侵删。

1、需要的jar包

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

2、工具包,可根据实际业务调整工具包

package com.jbf.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List; /*********************************
* 类描述:
* @author huangsz
* @date 2019/11/21
* @version v1.0
**********************************/
public class ExcelUtil { public static void main(String[] args) throws Exception{
} public static void exportExcel(HttpServletResponse response,
String title, String subheading,
List<String> header,
List<List<String>> dataList) throws Exception {
// 创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建行
HSSFCellStyle cellStyle = workbook.createCellStyle();
// 居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 创建一个sheet
HSSFSheet sheet = workbook.createSheet("sheet名字");
// 创建一个标题
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, header.size());
// 创建一个副标题
CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1, 1, 0, header.size());
sheet.addMergedRegion(cellRangeAddress);
sheet.addMergedRegion(cellRangeAddress2); // 标题,居中
HSSFRow row0 = sheet.createRow(0);
HSSFCell cell0 = row0.createCell(0);
cell0.setCellValue(title);
cell0.setCellStyle(cellStyle); // 第一行
HSSFRow row1 = sheet.createRow(1);
HSSFCell cell1 = row1.createCell(0);
// 副标题
cell1.setCellValue(subheading);
cell1.setCellStyle(cellStyle); // 表头
HSSFRow row = sheet.createRow(2);
HSSFCell cell = null;
for (int i = 0; i < header.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(header.get(i));
cell.setCellStyle(cellStyle);
} // 数据
for (int i = 0; i < dataList.size(); i++) {
row = sheet.createRow(i + 3);
for (int j = 0; j < dataList.get(i).size(); j++) {
row.createCell(j).setCellValue(dataList.get(i).get(j));
}
} OutputStream out = response.getOutputStream();
// 设置页面不缓存
response.reset();
String fileName = URLEncoder.encode(title, "UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
response.setContentType("application/msexcel");
workbook.write(out);
out.close();
} /**
* 导入数据
* @param file 表
* @param sheetIndex sheet索引值
* @param headerIndex 表头的索引(用于获取共多少列以及第几行开始读数据)
* @return
* @throws Exception
*/
public static List<List<Object>> importExcel(MultipartFile file, int sheetIndex, int headerIndex) throws Exception {
List<List<Object>> data = new ArrayList<>();
Workbook workbook = getWorkbook(file);
// 导入某页sheet
if (sheetIndex >-1) {
Sheet sheet = workbook.getSheetAt(sheetIndex);
List<List<Object>> lists = importSheet(sheet, headerIndex);
data.addAll(lists);
} else {
// 导入全部
//导入全部
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i);
if (sheet == null) {
continue;
}
List<List<Object>> lists = importSheet(sheet, headerIndex);
data.addAll(lists);
}
}
return data;
} private static List<List<Object>> importSheet(Sheet sheet, int headerIndex) throws Exception {
List<List<Object>> data = new ArrayList<>();
// 获取行数
int row = sheet.getLastRowNum();
//row = -1 表格中没有数据
//row = headerIndex 表格中表头以下没有数据(指没有有用数据)
if (row == -1 || row == headerIndex) {
throw new Exception("表格中没有有用数据!");
}
// 获取列数
int columnNum = sheet.getRow(headerIndex).getPhysicalNumberOfCells();
// 从表头下一行开始取数据
for (int i = headerIndex + 1; i <= row; i++) {
Row row1 = sheet.getRow(i);
List<Object> list = new ArrayList<>();
if (row1 != null) {
for (int j = 0; j < columnNum; j++) {
list.add(getCellValue(row1.getCell(j)));
}
}
data.add(list);
}
return data;
} private static Object getCellValue(Cell cell) {
String cellValue = "";
DecimalFormat df = new DecimalFormat("#");
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString().trim();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = df.format(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue()).trim();
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = "";
}
return cellValue.trim();
} private static Workbook getWorkbook(MultipartFile file) throws Exception{
Workbook workbook = null;
String xls = "xls";
String xlsx = "xlsx";
// 获取文件名
String fileName = file.getOriginalFilename();
if (fileName.endsWith(xls)) {
workbook = new HSSFWorkbook(file.getInputStream());
} else if(fileName.endsWith(xlsx)){
workbook = new XSSFWorkbook(file.getInputStream());
} else {
throw new Exception("文件格式有误!");
}
return workbook;
}
}

3、验证

@GetMapping("/exe")
public void excel(HttpServletResponse response) {
List<String> header = new ArrayList<>();
header.add("评论Id");
header.add("被评论人Id");
header.add("内容");
TestBean bean = new TestBean();
List<List<String>> dataList = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
List<String> data = new ArrayList<>();
data.add(i+"");
data.add(i+1+"");
data.add("第" + i + "条评论");
dataList.add(data);
}
try {
ExcelUtil.exportExcel(response,"标题","副标题",header,dataList);
} catch (Exception e) {
e.printStackTrace();
}
} @PostMapping("/up")
public void upload(@RequestParam("file") MultipartFile file){
try {
List<List<Object>> lists = ExcelUtil.importExcel(file, 0,2);
System.out.println(lists.size());
for (List<Object> list : lists) {
for (Object o : list) {
System.out.println(o);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

poi实现excel数据的导入和导出的更多相关文章

  1. pl/sql对excel数据的导入和导出

    本来这部分是在上篇pl/sql的,但笔者介于此篇的内容,就独立出来了, 1.导出查询结果到excel文件,在查询结果上右键,然后弹出选择框如下: 2.从excel向数据库中导入数据: a.创建要导入的 ...

  2. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  3. 使用phpExcel实现Excel数据的导入导出(完全步骤)

    使用phpExcel实现Excel数据的导入导出(完全步骤)   很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...

  4. 利用PHPExcel 实现excel数据的导入导出(源码实现)

    利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...

  5. Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  6. 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理

    在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能给系统用户更好的操作体验,也提高了用户录入数据的效率.我在较早时期的EasyUI的Web框架上, ...

  7. 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...

  8. 使用命令行将Excel数据表导入Mysql中的方法小结

    从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高 ...

  9. 使用PHPExcel实现Excel文件的导入和导出(模板导出)

    在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...

随机推荐

  1. cartographer 3D scan matching 理解

    cartographer 3D scan matching没有论文和其它资料,因此尝试通过源码理解其处理方法,理解不当之处还请指正. 目录: 0.2D 匹配方法简介 1.real time corre ...

  2. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  3. manage.py相关命令

    python manage.py makemigrations <app_name> 在对应app下的migrations目录下,生成XXXX_initial.py文件,该XXXX_ini ...

  4. OpenGL入门1.5:矩阵与变换

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 在阅读本篇博客之前,你必须对向量和矩阵有基本的认识,并且能熟练进行向量和矩阵的运算 我们已经知道了如何创建一个物体.着色.加 ...

  5. 3DES对称加密算法(ABAP 语言实现版)

    公司人事数据要求在系统间加密传输,而对接系统大部分是Java系统,要在不同的异构系统间能很好的加解密码,想到了标准的对称加密算法DES,因为是标准的算法,网络上存在大量公开用Java的DES算法,JA ...

  6. 故事 1:.net程序员成长经历

    我呢,是一名.NET程序员,在学校学的.NET和Java,在学校(校企合作)学了一年半的.NET方向的技术,后来觉得java也挺好的,又跑去学习Java,虽然学的很少,但是还是很希望能学好Java,所 ...

  7. python基础(9):基本数据类型四(set集合)、基础数据类型补充、深浅拷贝

    1. 基础数据类型补充 li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"] s = "_&qu ...

  8. Spring Boot 中如何支持异步方法

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  9. 2-How nginx processes a request

    原文:http://nginx.org/en/docs/http/request_processing.html server_name directive 参考:http://nginx.org/e ...

  10. vuepress1.x入门使用

    要点: 1.用npm操作会有各种问题,用yarn取代之; 2.yarn可以用npm全局安装,而npm是node环境自带,node环境去官网下载安装; 3.没有必要全局安装vuepress 操作: 1. ...