poi基本使用
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基本使用的更多相关文章
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- POI读取EXCEL(2007以上)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; im ...
- poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...
- POI导出Excel并下载
首先在pom.xml添加jar包: <!-- 导出excel --> <dependency> <groupId>org.apache.poi</groupI ...
- POI对Excel自定义日期格式的读取
用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel private List<String[]> rosolveFile(InputStream is, String ...
- POI完美解析Excel数据到对象集合中(可用于将EXCEL数据导入到数据库)
实现思路: 1.获取WorkBook对象,在这里使用WorkbookFactory.create(is); // 这种方式解析Excel.2003/2007/2010都没问题: 2.对行数据进行解析 ...
- 转:POI操作Excel导出
package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...
- Java POI 解析word文档
实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...
随机推荐
- CF1225B2 TV Subscriptions (Hard Version)
CF1225B2 TV Subscriptions (Hard Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- NOIP 2011 提高组初赛错题简析
Preface 好久没做初赛题了,据说今年的审核会更加严苛,作为一名去年未PY时只有\(92\)分的蒟蒻,我今年看来是\(90\)分都莫得了 然而今年也没怎么看重初赛,结果现在才来做,翻车到了\(84 ...
- 第04组 Alpha事后诸葛亮
一.组长博客:地址 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的问题是让大学生可以通过福鱼网站将暂时无 ...
- ndt算法学习
NDT算法原理: NDT算法的基本思想是先根据参考数据(reference scan)来构建多维变量的正态分布, 如果变换参数能使得两幅激光数据匹配的很好,那么变换点在参考系中的概率密度将会很大. 因 ...
- golang两种在for循环中使用goroutine的错误形式
1. 闭包中使用循环体中变化的量 platground链接: https://play.golang.org/p/6x6_tuQNjUO type Value struct{ val int } fu ...
- 简单ALV得演示(用到了ALV可编辑及保存后修改数据库)
*&---------------------------------------------------------------------* *& Report YPMRP010_ ...
- Elasticsearch 使用 php curl 插入数据
<?php /** * Created by PhpStorm. * User: func7 * Date: 2018/11/8 * Time: 11:24 */ set_time_limit( ...
- linq 数据库已存在,直接添加数据
using System.Data.Linq;using System.Data.Linq.Mapping; namespace ConsoleApplication1388{ class Progr ...
- jakarta-oro-2.0.8.jar-----------JAVA FTP相关
资源不好找,找到了就和大家分享一下! 链接:https://share.weiyun.com/51kBB0y 密码:2hcxcu
- 最简单取得外网IP
#coding=utf-8import urllib2import re print re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http ...