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 ... 
随机推荐
- LG2921 [USACO2008DEC]Trick or Treat on the Farm  内向基环树
			问题描述 LG2921 题解 发现一共有 \(n\) 个点,每个点只有一条出边,即只有 \(n\) 条边,于是就是一个内向基环树. \(\mathrm{Tarjan}\) 缩点. 但是这个题比较猥琐的 ... 
- Linux 下 make 的时候,老是一堆warning
			用下面的方法只显示error : 1) export CFLAGS="-w" 2) ./configure 3) make 
- 事件代理/事件委托----点击li弹出对应的下标和内容
			<body> <ul> <li>这是第一行</li> <li>这是第二行</li> <li>这是第三行</li ... 
- 【ECNU3510】燃烧吧,室友!(模拟)
			点此看题面 大致题意: 给你一个只含\(C,H,O\)的化学式,问需要几\(mol\)的氧气才能使其完全燃烧成\(CO_2\)和\(H_2O\). 模拟+化学 首先,我们模拟求出化学式中\(C,H,O ... 
- git push时出现 Username for 'https://github.com': 仅仅限于github
			使用git push origin master是出现如下问题:Username for 'https://github.com': 解决办法: git remote set-url origin g ... 
- SuperSocket 2.0 发布第一个预览版, 另寻找Yang Fan哥哥
			昨天,SuperSocket的作者发布了2.0版本的第一个预览版.SuperSocket 2.0 是一个经过全新设计的,第一个完全基于.NET Core的版本.作者正在积极尝试提供更简单易用的API的 ... 
- Ubuntu 16.04上anaconda安装和使用教程,安装jupyter扩展等 | anaconda tutorial on ubuntu 16.04
			本文首发于个人博客https://kezunlin.me/post/23014ca5/,欢迎阅读最新内容! anaconda tutorial on ubuntu 16.04 Guide versio ... 
- SpringBoot-@ControllerAdvice 拦截异常并统一处理
			SpringBoot是为了简化Spring应用的创建.运行.调试.部署等一系列问题而诞生的产物, 自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可 ... 
- Ubuntu18.04 安装 Mysql 5.7 问题
			在安装完Mysql5.7后 没有让你输入的密码的时候,便会生成一个默认的密码. 生成的密码在debian.cnf 文件中 记住用户名和密码.然后去登陆 mysql -udebian-sys-maint ... 
- Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象
			部分一 14年底进入目前公司时,领导准备开发一款新软件平台以取代原有平台.原平台采用C++Build开发界面(window c/s客户端) .Visual Studio(封装dll模块).过完年,领导 ... 
