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. LG2921 [USACO2008DEC]Trick or Treat on the Farm 内向基环树

    问题描述 LG2921 题解 发现一共有 \(n\) 个点,每个点只有一条出边,即只有 \(n\) 条边,于是就是一个内向基环树. \(\mathrm{Tarjan}\) 缩点. 但是这个题比较猥琐的 ...

  2. Linux 下 make 的时候,老是一堆warning

    用下面的方法只显示error : 1) export CFLAGS="-w" 2) ./configure 3) make

  3. 事件代理/事件委托----点击li弹出对应的下标和内容

    <body> <ul> <li>这是第一行</li> <li>这是第二行</li> <li>这是第三行</li ...

  4. 【ECNU3510】燃烧吧,室友!(模拟)

    点此看题面 大致题意: 给你一个只含\(C,H,O\)的化学式,问需要几\(mol\)的氧气才能使其完全燃烧成\(CO_2\)和\(H_2O\). 模拟+化学 首先,我们模拟求出化学式中\(C,H,O ...

  5. git push时出现 Username for 'https://github.com': 仅仅限于github

    使用git push origin master是出现如下问题:Username for 'https://github.com': 解决办法: git remote set-url origin g ...

  6. SuperSocket 2.0 发布第一个预览版, 另寻找Yang Fan哥哥

    昨天,SuperSocket的作者发布了2.0版本的第一个预览版.SuperSocket 2.0 是一个经过全新设计的,第一个完全基于.NET Core的版本.作者正在积极尝试提供更简单易用的API的 ...

  7. Ubuntu 16.04上anaconda安装和使用教程,安装jupyter扩展等 | anaconda tutorial on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/23014ca5/,欢迎阅读最新内容! anaconda tutorial on ubuntu 16.04 Guide versio ...

  8. SpringBoot-@ControllerAdvice 拦截异常并统一处理

    SpringBoot是为了简化Spring应用的创建.运行.调试.部署等一系列问题而诞生的产物, 自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可 ...

  9. Ubuntu18.04 安装 Mysql 5.7 问题

    在安装完Mysql5.7后 没有让你输入的密码的时候,便会生成一个默认的密码. 生成的密码在debian.cnf 文件中 记住用户名和密码.然后去登陆 mysql -udebian-sys-maint ...

  10. Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象

    部分一 14年底进入目前公司时,领导准备开发一款新软件平台以取代原有平台.原平台采用C++Build开发界面(window c/s客户端) .Visual Studio(封装dll模块).过完年,领导 ...