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. 对mglearn库的理解(转)

    https://blog.csdn.net/az9996/article/details/86490496

  2. c# 多线程 双色球

    学习记录.仅供参考. 知识点: 多线程 Lock 环境: Visual Studio 2017 public partial class Form1 : Form { private static r ...

  3. k8s二进制部署

    k8s二进制部署 1.环境准备 主机名 ip地址 角色 k8s-master01 10.0.0.10 master k8s-master02 10.0.0.11 master k8s-node01 1 ...

  4. 【Linux命令】ulimit设置最大文件打开数

    一.简介 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默 ...

  5. Tensorflow源码解析2 -- 前后端连接的桥梁 - Session

    Session概述 1. Session是TensorFlow前后端连接的桥梁.用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计 ...

  6. SpringBoot2版本Caused by: java.sql.SQLSyntaxErrorException: Table 'dinner.hibernate_sequenc

    1.SpringBoot2版本Caused by: java.sql.SQLSyntaxErrorException: Table 'dinner.hibernate_sequenc报错. -java ...

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

    八.生成新的单节蛇身我们这里先说说游戏小原理好了,游戏运行后,通过计时器事件不断生成新的单节蛇身类SnakeNode,添加到List中的0位置,原来的蛇头变成了第二节.该节新蛇头的坐标通过蛇头前进方向 ...

  8. Java学习——日期类

    Java学习——日期类 摘要:本文主要记录了Java开发中用到的和日期有关的类以及对日期的操作. 部分内容来自以下博客: https://www.cnblogs.com/talk/p/2680591. ...

  9. MySQL5.7增量备份恢复全实战

    一. 简介 1. 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量 备份的对象是进行全备后所产生的增加和修改的文件; ...

  10. 解决eclipse打开文件乱码

    解决办法 需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 W ...