内容来源于网络,侵删。

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. python有哪些优点跟缺点

    显著的优点 1. 语言简洁优美,Java能实现的python都能实现(除安卓开发),python能实现的Java不一定能实现如(自动化运维,爬虫) 2. 跨平台,window, linux,mac通用 ...

  2. php 交换值

    使用异或和第三参数比较 结果比较:(其中之一) 异或:执行时间在 0.035-0.085之间 第三参数:执行时间在 0.035-0.050之间 结论:使用第三参数执行效率更高/更稳定

  3. QOS限速

    XX涉及的QOS限速主要有两种: 第一种是针对一个端口下双向IP互访: 第二种是针对多个端口下双向IP互访:(聚合car) 聚合car:是指能够对多个业务使用同一个car进行流量监控,即如果多个端口应 ...

  4. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom

    CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom 栈结构镇楼 这里先给 ...

  5. U8 BOM数据结构

    U8 BOM涉及的数据表有四张 bom_bom     BOM资料  该表主要记录BOM表的一些基本信息,版本.创建.审核等信息,不包括任何子件.母件信息:bomid是BOM主键 bom_parent ...

  6. SQLPrompt8.2 安装之后找不到激活入口

    如果你发现是这样的,找不到像其他人说的serial number这个选项,不要惊慌.. 首先你得先断网,然后再打开sql客户端,点击Manage License ,然后你会看到 activate 这个 ...

  7. go开发注意事项和dos的一些操作

    不需要加分号 写法 go编译器一行一行编译,所以多条语句不能写在同一行,否则会报错 go语言定义的变量或者import的包如果没有使用到,代码不能通过编译 func main() { ... } 只能 ...

  8. SpringBoot(六) SpringBoot整合Swagger2(自动化生成接口文档)

    一:在上篇文章pom增加依赖: <dependency> <groupId>io.springfox</groupId> <artifactId>spr ...

  9. centos下搭建python双版本环境

    目录 centos下搭建python双版本环境 一.安装python3 1.理清自带python位置 2.更新用于下载编译python3的相关包 3.安装pip 4.用pip安装wget 5.用wge ...

  10. JS基本语法---while循环---练习

    JS基本语法---while循环---练习 练习1: 求6的阶乘 var ji = 1;//存储最终的阶乘的结果 var i = 1;//开始的数字 while (i <= 6) { ji *= ...