poi基本使用

依赖

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10.1</version>
</dependency>

本地生成Excel

数据类

package com.ytkj.mozq_excel_server.poi;

import lombok.Data;

import java.util.List;

/**
* @date: 2019/10/30 15:00
*/
@Data
public class ExcelData {
private String fileName = "测试表格";
private String sheetName = "表格名称";
private String[] columns;
private List<String[]> data;
}

创建代码

package com.ytkj.mozq_excel_server.poi;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.format.CellFormatType; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
* @date: 2019/10/30 14:57
*/
public class Test01 {
public static void main(String[] args) throws IOException {
//行和列的起始索引都是0。
/*=========== 创建数据对象 ==========*/
ExcelData excelData = new ExcelData();
excelData.setColumns(new String[]{
"车牌号",
"车辆载重",
"车辆类型"
});
List<String[]> data = new ArrayList<>();
data.add(new String[]{
"陕A0001",
"5.5",
"半挂"
});
excelData.setData(data); /*=========== 创建工作簿,写入数据 ==========*/
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("测试表");
//创建标题行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < excelData.getColumns().length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelData.getColumns()[i]);
} //创建数据行
for (int i = 0; i < excelData.getData().size(); i++) {
HSSFRow aRow = sheet.createRow(i + 1);
String[] rowData = excelData.getData().get(i);
for (int j = 0; j < rowData.length; j++) {
HSSFCell cell = aRow.createCell(j);
cell.setCellValue(rowData[j]);
}
} /*=========== 将工作簿写入输出流 ==========*/
wb.write(new FileOutputStream("E:\\mozq\\00store\\demo1.xlsx"));
}
/*
Exception in thread "main" java.io.FileNotFoundException: E:\mozq\00store\x1.xlsx (另一个程序正在使用此文件,进程无法访问。)
*/
}

下载Excel

package com.ytkj.mozq_excel_server.controller.car.test;

import com.ytkj.mozq_excel_server.poi.ExcelData;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
* @date: 2019/10/30 15:44
*/
@RestController
@RequestMapping("/car")
public class POIController {
@RequestMapping("/exportCarExcel")
public void exportCarExcel(HttpServletResponse response){
/*=========== 创建数据对象 ==========*/
ExcelData excelData = getCarExcelData();
/*=========== 创建工作簿,写入数据 ==========*/
HSSFWorkbook wb = getWorkbook(excelData);
//将数据写入响应
try {
wb.write(response.getOutputStream());
// response.setHeader("Content-Disposition", "attachment;filename=" + "测试表下载.xlsx");
response.setContentType("application/force-download");
response.setHeader("Content-Disposition", "attachment;filename=" + new String("测试表下载.xlsx".getBytes("UTF-8"), "ISO-8859-1"));
} catch (IOException e) {
e.printStackTrace();
}
} private HSSFWorkbook getWorkbook(ExcelData excelData){
/*=========== 创建工作簿,写入数据 ==========*/
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("测试表");
//创建标题行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < excelData.getColumns().length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelData.getColumns()[i]);
} //创建数据行
for (int i = 0; i < excelData.getData().size(); i++) {
HSSFRow aRow = sheet.createRow(i + 1);
String[] rowData = excelData.getData().get(i);
for (int j = 0; j < rowData.length; j++) {
HSSFCell cell = aRow.createCell(j);
cell.setCellValue(rowData[j]);
}
} return wb;
} private ExcelData getCarExcelData(){
ExcelData excelData = new ExcelData();
excelData.setColumns(new String[]{
"车牌号",
"车辆载重",
"车辆类型"
});
List<String[]> data = new ArrayList<>();
data.add(new String[]{
"陕A0001",
"5.5",
"半挂"
});
excelData.setData(data);
return excelData;
}
}

Bugs

java.lang.IllegalArgumentException: The workbook already contains a sheet of this name
原因:
重复创建名称相同的Sheet
HSSFWorkbook wb = getWorkbook(excelData);//这里已经创建了Sheet表。
HSSFSheet sheet = wb.createSheet("测试表");//这里又创建同名称的Sheet表。
# 下载文件名称乱码。
_____.xlsx
错误代码:
response.setHeader("Content-Disposition", "attachment;filename=" + "测试表下载.xlsx");
正确代码:
response.setContentType("application/force-download");
response.setHeader("Content-Disposition", "attachment;filename=" + new String("测试表下载.xlsx".getBytes("UTF-8"), "ISO-8859-1"));

poi基本使用的更多相关文章

  1. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  2. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  3. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  4. POI读取EXCEL(2007以上)

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; im ...

  5. poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算

    /** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...

  6. POI导出Excel并下载

    首先在pom.xml添加jar包: <!-- 导出excel --> <dependency> <groupId>org.apache.poi</groupI ...

  7. POI对Excel自定义日期格式的读取

    用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel private List<String[]> rosolveFile(InputStream is, String ...

  8. POI完美解析Excel数据到对象集合中(可用于将EXCEL数据导入到数据库)

    实现思路: 1.获取WorkBook对象,在这里使用WorkbookFactory.create(is); // 这种方式解析Excel.2003/2007/2010都没问题: 2.对行数据进行解析 ...

  9. 转:POI操作Excel导出

    package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...

  10. Java POI 解析word文档

    实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...

随机推荐

  1. 补充: SpringBoot

    SpringBoot Spring Boot  约定大于配置 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程. 该框 ...

  2. 小白专场-堆中的路径-python语言实现

    目录 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11407287.h ...

  3. Vue中MVVM模式的双向绑定原理 和 代码的实现

      今天带大家简单的实现MVVM模式,Object.defineProperty代理(proxy)数据   MVVM的实现方式: 模板编译(Compile) 数据劫持(Observer) Object ...

  4. Flutter基础系列之混合开发(二)

    1.混合开发的场景 1.1作为独立页面加入 这是以页面级作为独立的模块加入,而不是页面的某个元素. 原生页面可以打开Flutter页面 Flutter页面可以打开原生页面 1.2作为页面的一部分嵌入 ...

  5. 十一、Spring之事件监听

    Spring之事件监听 ApplicationListener ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成Applica ...

  6. RocketMQ多master多salve集群搭建

    一.RocketMQ集群模式简介 单Master方式 风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用. 多Master模式 一个集群中没有slave, 全是mas ...

  7. NaN不等于NaN

    目录 原因 表达式计算 类型转换 总结 不知道这个小知识点用得多不多,曾经在书上看到过,所以有一些印象,前段时间顺手写出类似如下的代码 var result; if (parseInt('abc')= ...

  8. ASP.NET Core快速入门(第5章:认证与授权)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务31:课时介绍 1.Cookie-based认证与授权 2.Cookie- ...

  9. 练手WPF(四)——贪吃蛇小游戏的简易实现(上)

    一. 游戏界面首先,按照惯例,编辑MainWindow.xaml,先将游戏界面制作好.非常简单:(1)主游戏区依然使用我们熟悉的Canvas控件,大小为640X480像素,设定每小格子为20px,所以 ...

  10. 在.NET Core 3.0 Preview上使用Windows窗体设计器

    支持使用基于Windows窗体应用程序的.NET Core 3.0(预览)的Windows窗体设计器 介绍 截至撰写本文时,Microsoft和社区目前正在测试.NET Core 3.0.如果您在.N ...