POI导出EXCEL模板数据

1.apache poi 3.14+版本

package com.jd.medicine.erp.shop.service.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

/**
 * 描述:ImpAndExpExcel
 * @author shizhenwei5
 * @date 2020年3月17日
 */
@Slf4j
public class ExcelExportUtils {

    /**
     * 描述:导出xlsx
     * @author shizhenwei5
     * @date 2020年3月23日
     * @param data 导出数据
     * @param fields 导出列属性
     * @param template 导出模板流
     * @param fileName 导出文件名称
     * @return
     * @throws IOException
     */
    public static void doExportXlsx(Object data, String[] fields, InputStream template,String fileName) throws IOException{
        doExportXlsx(data, fields, null, template, null, fileName);
    }

    /**
     * 描述:导出xlsx
     * @author shizhenwei5
     * @date 2020年3月23日
     * @param data 导出数据
     * @param fields 导出列属性
     * @param template 导出模板流
     * @param rowNum 模板第几行导出
     * @param fileName 导出文件名称
     * @return
     * @throws IOException
     */
    public static void doExportXlsx(Object data, String[] fields, InputStream template,Integer rowNum,String fileName) throws IOException{
        doExportXlsx(data, fields, null, template, rowNum, fileName);
    }

    /**
     * 描述:导出xlsx
     * @author shizhenwei5
     * @date 2020年3月23日
     * @param data 导出数据
     * @param fields 导出列属性
     * @param fieldTypes 导出列属性类型
     * @param template 导出模板流
     * @param rowNum 模板第几行导出
     * @param fileName 导出文件名称
     * @return
     * @throws IOException
     */
    public static void doExportXlsx(Object data,String[] fields,String[] fieldTypes,InputStream template,Integer rowNum,String fileName) throws IOException{
        XSSFWorkbook workbook = getXSSFWorkbook(data, fields, fieldTypes, template,rowNum);
        ServletOutputStream out = null;
        try {
            if(!fileName.endsWith(".xlsx")) {
                fileName += ".xlsx";
            }
            HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/octet-stream; charset=UTF-8");
            response.addHeader("Content-Disposition", "attachment; filename=\""+new String(fileName.getBytes("GB2312"),"ISO8859-1")+"\";");//
            out = response.getOutputStream();
            workbook.write(out);
            out.flush();
            //workbook.close();
        } catch (IOException e) {
            log.info("#ExcelExport.doExportXlsx 异常:{}", e);
            e.printStackTrace();
        }
    }

    /**
     * 描述:获取导出XSSFWorkbook
     * @author shizhenwei5
     * @date 2020年3月23日
     * @param data 导出数据
     * @param fields 导出列属性
     * @param template 导出模板流
     * @return
     * @throws IOException
     */
    public static XSSFWorkbook getXSSFWorkbook(Object data, String[] fields, InputStream template) throws IOException {
        return getXSSFWorkbook(data, fields, null, template, null);
    }

    /**
     * 描述:获取导出XSSFWorkbook
     * @author shizhenwei5
     * @date 2020年3月23日
     * @param data 导出数据
     * @param fields 导出列属性
     * @param fieldTypes 导出列属性类型
     * @param template 导出模板流
     * @param rowNum 模板第几行导出
     * @return
     * @throws IOException
     */
    public static XSSFWorkbook getXSSFWorkbook(Object data, String[] fields,String[] fieldTypes, InputStream template,Integer rowNum) throws IOException {
        JSONArray jsonData = (JSONArray) JSONArray.toJSON(data);
        XSSFWorkbook workbook = new XSSFWorkbook(template);
        XSSFSheet sheet = workbook.getSheetAt(0);
        int startRowIndex;
        if(null != rowNum) {
            startRowIndex = rowNum>0?rowNum-1:0;
        }else {
            startRowIndex = 0;
            while(true) {
                XSSFRow row = sheet.getRow(startRowIndex);
                if(row==null || null==row.getCell(0) || StringUtils.isEmpty(row.getCell(0).getRawValue())) {
                    break;
                }
                startRowIndex++;
            }
        }

        for (int i = 0; i < jsonData.size(); i++, startRowIndex++) {
            JSONObject jsonObj = jsonData.getJSONObject(i);
            for (int colIndex = 0; colIndex < fields.length; colIndex++) {
                XSSFCell tempCell = getXssfCell(sheet, startRowIndex, colIndex, true);
                if(null==jsonObj.get(fields[colIndex])) {
                    continue;
                }
                if(null == fieldTypes) {
                    tempCell.setCellValue(jsonObj.getString(fields[colIndex]));
                    continue;
                }

                if("Integer".equals(fieldTypes[colIndex]) || "int".equals(fieldTypes[colIndex])) {
                    tempCell.setCellValue(jsonObj.getInteger(fields[colIndex]));
                }else if("Long".equals(fieldTypes[colIndex]) || "long".equals(fieldTypes[colIndex])) {
                    tempCell.setCellValue(jsonObj.getLong(fields[colIndex]));
                }else if("Double".equals(fieldTypes[colIndex]) || "double".equals(fieldTypes[colIndex])) {
                    tempCell.setCellValue(jsonObj.getDouble(fields[colIndex]));
                }else if("Float".equals(fieldTypes[colIndex]) || "float".equals(fieldTypes[colIndex])) {
                    tempCell.setCellValue(jsonObj.getFloat(fields[colIndex]));
                }else if("BigDecimal".equals(fieldTypes[colIndex])){
                    tempCell.setCellValue(jsonObj.getLong(fields[colIndex]));
                } if("Date".equals(fieldTypes[colIndex])) {
                    Date cellDate = jsonObj.getDate(fields[colIndex]);
                    //tempCell.setCellType(CellType.STRING);
                    if(null != cellDate) {
                        tempCell.setCellValue(DateTimeUtils.getDate(cellDate));
                    }
                }else {
                    tempCell.setCellValue(jsonObj.getString(fields[colIndex]));
                }
            }
        }
        return workbook;
    }

    /**
     * 描述:创建或获取单元格
     * @author shizhenwei5
     * @date 2020年3月20日
     * @param sheet
     * @param rowIndex
     * @param colIndex
     * @param isCreate
     * @return
     */
    public static XSSFCell getXssfCell(XSSFSheet sheet, int rowIndex, int colIndex, boolean isCreate) {
        if (isCreate) {
            XSSFRow row = sheet.getRow(rowIndex);
            if (row == null) {
                row = sheet.createRow(rowIndex);
                row.setHeightInPoints(24);// 设置行的高度(单元格的高度)
            }
            XSSFCell cell = row.getCell(colIndex);
            if (cell == null) {
                cell = row.createCell(colIndex);
            }
            return cell;
        } else {
            return getXssfCell(sheet, rowIndex, colIndex);
        }
    }

    /**
     * 描述:获取 不创建单元格
     * @author shizhenwei5
     * @date 2020年3月20日
     * @param sheet
     * @param rowIndex
     * @param colIndex
     * @return
     */
    public static XSSFCell getXssfCell(XSSFSheet sheet, int rowIndex, int colIndex) {
        XSSFRow row = sheet.getRow(rowIndex);
        if (row != null) {
            XSSFCell cell = row.getCell(colIndex);
            if (cell != null) {
                return cell;
            }
        }
        return null;
    }
}

原文地址:https://www.cnblogs.com/zwcry/p/12552082.html

时间: 2024-10-03 23:22:02

POI导出EXCEL模板数据的相关文章

java中使用poi导出excel表格数据并且可以手动修改导出路径

在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 jar包下载路径:http://download.csdn.net/download/pumpkin09/7077011 第二步:添加poi导出工具类 1 package com.yjd.admin.util; 2 3 import java.io.IOException; 4 import ja

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri

基于POI导出Excel数据

基于POI导出Excel数据 在项目中会有许多报表业务,需要导出数据.在这里我们采用基于POI的方式解析.POI有俩种解析方式HSSF(xls格式)和XSSF(xlsx). 以BOS物流的运单管理界面为例: 前端代码 导出运单信息,生成报表: 1.添加导出按钮 2.添加导出事件 后台代码实现 POI生成Excel步骤写Excel过程一样,新建Excel文档----新建Sheet---新建Row---新建Cell单元格---写单元格数据. Maven导入jar包信息请参加一键上传里面的配置 Act

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

POI导出EXCEL经典实现

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

POI导出EXCEL经典实现(转)

http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能. 2.POI结构 HSSF - 提供读写Microsoft Excel XLS格式档案的功能.XS

JAVA关于POI导出Excel内存溢出的解决方案

JAVA关于POI导出Excel内存溢出的解决方案 在我们使用JAVA开发过程中,经常要导出查询获得的数据,这些数据一般情况下都是以Excel存储的,因此我们在导出数据的时候要使用JAVA的POI库,其主要是对各种windows平台的数据格式进行操作,在这里,我们是对Excel操作. 生成Excel的过程原理是这样的,首先,我们对数据库进行查询,获取相应的结果集,一般是list集合,然后生成Workbook对象,根据生成的Workbook对象获取sheet对象,根据此sheet对象获取Row对象

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

使用poi导出Excel

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据. 常见的java Excel  API Java Aspose Cells Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布.这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读.写和操纵电子表格Excel的组件.此API常见用