`

Excel poi导出

 
阅读更多
package com.manyi.iw.agent.sale.utils;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.*;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by kehui on 2014/11/14.
 */
public class PoiUtil {

    public static HSSFWorkbook initWorkbookByTemplate(List<List<String>> data, InputStream is, int offsetRow)
            throws IOException {
        return initWorkbook(data, null, is, offsetRow);
    }

    public static HSSFWorkbook initWorkbookByData(List<List<String>> data, List<String> titles, int offsetRow)
            throws IOException {
        return initWorkbook(data, titles, null, offsetRow);
    }

    /**
     * 可支持两种方式的xls输出
     * 1.根据已有xls文件的输入流,初始化workbook,填充数据
     * 2.新建workbook,根据传入数据和标题填充workbook
     * @param data 需要填充的数据
     * @param titles  标题
     * @param is 模板的输入流
     * @param offsetRow 行偏移量
     * @return
     * @throws IOException
     */
    public static HSSFWorkbook initWorkbook(List<List<String>> data, List<String> titles, InputStream is, int offsetRow)
            throws IOException {
        HSSFWorkbook workbook = null;
        HSSFSheet sheet = null;
        if (is == null) {
            workbook = new HSSFWorkbook();
            sheet = workbook.createSheet();
        } else {
            workbook = new HSSFWorkbook(is);
            sheet = workbook.getSheetAt(0);
        }
        if (data == null || data.size() == 0)
            return workbook;
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        //HSSFFont font = workbook.createFont();
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        //cellStyle.setFont(font);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        for (int i = 0; i < data.size(); i++) {
            List<String> rowData = data.get(i);
            HSSFRow row = sheet.createRow(offsetRow + i);
            if (i == 0 && (null != titles && titles.size() > 0)) {
                for (int j = 0; j < titles.size(); j++) {
                    //HSSFCell cell = createTitleCell(row, workbook, j, rowData.get(j));
                    HSSFCell cell = row.createCell(j);
                    cell.setCellStyle(cellStyle);
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    cell.setCellValue(rowData.get(j));
                }
                continue;
            }
            for (int i1 = 0; i1 < rowData.size(); i1++) {
                //HSSFCell cell = createTitleCell(row, workbook, i1, rowData.get(i1));
                HSSFCell cell = row.createCell(i1);
                cell.setCellStyle(cellStyle);
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(rowData.get(i1));
            }
        }
        return workbook;
    }

    public static HSSFCell createTitleCell(HSSFRow row, HSSFWorkbook workbook, int cellNumber, String cellValue) {
        HSSFCell cell = row.createCell(cellNumber);
        //cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        //HSSFFont font = workbook.createFont();
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        //font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        //cellStyle.setFont(font);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cell.setCellStyle(cellStyle);
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setCellValue(cellValue);
        return cell;
    }

    public static void main(String[] args) throws Exception{

    }

    /**
     * SXSS导出
     * @param data
     * @param titles
     * @param is
     * @param offsetRow
     * @return
     * @throws IOException
     */
    public static  SXSSFWorkbook  initSXSSWorkbook(List<List<String>> data, List<String> titles,InputStream is, int offsetRow) throws IOException {
        XSSFWorkbook workbook = null;
        XSSFSheet sheet = null;
        if (is == null) {
            workbook  =new XSSFWorkbook();
            sheet = workbook.createSheet();
        } else {
            workbook = new XSSFWorkbook(new BufferedInputStream(is));
            sheet = workbook.getSheetAt(0);
        }

        SXSSFWorkbook newWorkbook = new SXSSFWorkbook(workbook,100);
        Sheet newSheet = newWorkbook.getSheetAt(0);
        CellStyle cellStyle = newWorkbook.createCellStyle();


        if (data == null || data.size() == 0){
            return newWorkbook;
        }

            for (int i = 0; i < data.size(); i++) {
                List<String> rowData = data.get(i);
                Row newRow = newSheet.createRow(offsetRow + i);
                if (i == 0 && (null != titles && titles.size() > 0)) {
                    for (int j = 0; j < titles.size(); j++) {
                        Cell cell = newRow.createCell(j);
                        cell.setCellStyle(cellStyle);
                        cell.setCellType(XSSFCell.CELL_TYPE_STRING);
                        cell.setCellValue(rowData.get(j));
                    }
                    continue;
                }
                for (int i1 = 0; i1 < rowData.size(); i1++) {
                    Cell cell = newRow.createCell(i1);
                    cell.setCellStyle(cellStyle);
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                    cell.setCellValue(rowData.get(i1));
                }
            }
            return newWorkbook;
    }

}

 

    /**
     * 根据一个实体集合,获得用于填充Excel的数据
     *
     * @param ts         实体集合
     * @param fieldNames 实体中的字段名称(一定要输入正确)
     * @return
     */
    public <T> List<List<String>> getExportData(List<T> ts, String... fieldNames) {
        if(CollectionUtils.isEmpty(ts))
            return null;
        List<List<String>> data = new ArrayList<>();
        for(T t : ts) {
            List<String> strs = new ArrayList<>();
            for(String fn : fieldNames) {
                String value = "";
                try {
                    value = BeanUtils.getProperty(t, fn);
                } catch(IllegalAccessException e) {
                    value = fn;
                } catch(InvocationTargetException e) {
                    value = fn;
                } catch(NoSuchMethodException e) {
                    value = fn;
                }
                strs.add(value);
            }
            data.add(strs);
        }
        return data;
    }
    /**
     * 报表导出通用方法
     *
     * @param response
     * @param data         报表的填充数据
     * @param templateType 导出文件所使用的模板类型
     * @param offset       行偏移量
     */
    public void exportExcel(HttpServletResponse response,
                            HttpServletRequest request,
                            List<List<String>> data,
                            String fileName,
                            int templateType,
                            int offset) throws IOException {
        ExportTemplateEnum exportTemplate = ExportTemplateEnum.getTemplate(templateType);
        if(null == exportTemplate)
            return;
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("excel-template/" + exportTemplate.getFileName());
        if(is == null)
            return;
        String exportFileName = new String((StringUtils.isBlank(fileName) ?
                exportTemplate.getDesc() :
                fileName).getBytes(request.getCharacterEncoding()), "ISO8859-1");
        //后辍
        exportFileName += exportTemplate.getFileName().substring(exportTemplate.getFileName().lastIndexOf("."));
        response.addHeader("Content-Disposition", "attachment;filename=\"" + exportFileName + "\"");
        response.setContentType("application/x-download");
        response.addHeader("Content-Encoding", "utf-8");
        OutputStream os = response.getOutputStream();
        HSSFWorkbook workbook = PoiUtil.initWorkbookByTemplate(data, is, offset);
        workbook.write(os);
        os.flush();
        os.close();
        is.close();
    }

    public void exportSXSSFExcel(HttpServletResponse response,
                            HttpServletRequest request,
                            List<List<String>> data,
                            String fileName,
                            int templateType,
                            int offset) throws IOException {
        ExportTemplateEnum exportTemplate = ExportTemplateEnum.getTemplate(templateType);
        if(null == exportTemplate)
            return;
        FileInputStream is = new FileInputStream(this.getClass().getClassLoader().getResource("excel-template/" + exportTemplate.getFileName()).getFile());
        if(is == null)
            return;
        String exportFileName = new String((StringUtils.isBlank(fileName) ?
                exportTemplate.getDesc() :
                fileName).getBytes(request.getCharacterEncoding()), "ISO8859-1");
        //后辍
        exportFileName += exportTemplate.getFileName().substring(exportTemplate.getFileName().lastIndexOf("."));
        response.addHeader("Content-Disposition", "attachment;filename=\"" + exportFileName + "\"");
        response.setContentType("application/x-download");
        response.addHeader("Content-Encoding", "utf-8");
        OutputStream os = response.getOutputStream();
        SXSSFWorkbook workbook = PoiUtil.initSXSSWorkbook(data, null,is, offset);
        workbook.write(os);
        os.flush();
        os.close();
        is.close();
    }

 

List<QuerySignExportResult> list4 = agentService.querySignOther(cityName, cityId, beginDate, endDate);
				List<List<String>> data4 = getExportData(list4,
						"cityName",
						"createTime",
						"agentId",
						"agentName",
						"agentMobile",
						"groupName",
						"mendianName",
						"areaName",
						"bigAreaName",
						"callMobile",
						"signName",
						"remark");
				exportSXSSFExcel(response, request, data4, "标为其他", ExportTemplateEnum.signOther.getType(), 1);

 

 

			<dependency>
				<groupId>org.apache.poi</groupId>
				<artifactId>poi</artifactId>
				<version>${poi.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.poi</groupId>
				<artifactId>poi-ooxml</artifactId>
				<version>${poi.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.poi</groupId>
				<artifactId>poi-ooxml-schemas</artifactId>
				<version>${poi.version}</version>
			</dependency>
<poi.version>3.9</poi.version>

 

分享到:
评论

相关推荐

    POI导出Excel文件

    以下是一个简化的示例,演示了如何使用POI导出Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io....

    excelpoi导出导入java.zip java的poi-excel 导出导入模型 控制浏览器弹出一个下载框

    excelpoi导出导入java.zip java的poi-excel 导出导入模型 将项目下载后,用idea的open打开,maven自动下包, 用浏览器地址栏访问一定的ip后,项目输出写出流,带特殊请求头部 ,浏览器会弹出一个下载框,点击确认...

    POI导出 POI导出 POI导出

    POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...

    使用poi方式导出excel(分多个sheet导出)

    本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...

    导出excel文档所需要的poi的jar包

    在Java环境中,如果你需要导出或者操作Excel文档,Apache POI是必不可少的工具。标题提到的"导出excel文档所需要的poi的jar包"正是指这个功能。 Apache POI的版本3.8是较早的一个稳定版本,尽管现在已经有更新的...

    java导出excel POI jar包

    这个链接提供了一个详细的Java代码示例,演示了如何使用POI导出Excel。在实际开发中,你可以根据这个示例调整代码以满足自己的需求,比如添加更多的数据处理逻辑或自定义样式。记得在导入项目时,确保包含上述提到的...

    POI 生成EXCEL2007【含例子】

    学习和理解这些知识点对于开发需要处理Excel文件的Java应用至关重要,特别是在数据导入导出、报表生成、自动化测试等领域。通过实践这些示例,开发者能够掌握如何利用Apache POI高效地生成和操作Excel 2007文件,...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    springboot+poi导出指定格式Excel模板

    springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    使用POI导出Excel文件** 导出Excel文件主要涉及以下几个步骤: - **创建Workbook对象**:这是Excel文件的容器,可以使用`XSSFWorkbook`(针对.xlsx)或`HSSFWorkbook`(针对.xls)创建。 - **创建Sheet对象**:...

    poi多表头 excel导出

    在Java编程领域,"poi多表头 excel导出"是一个常见的需求,特别是在数据处理和报告生成的场景中。Apache POI 是一个流行的开源库,它允许开发者使用Java来创建、修改和显示Microsoft Office格式的文件,包括Excel。...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值)

    poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值), poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值) poi导出导入封装(使用注解建立实体与excel映射关系+反射设置...

    poi 导出多表头

    在本场景中,我们关注的是如何使用 POI 来创建具有复杂表头的 Excel 导出功能。多表头通常指的是在 Excel 表格中拥有多个层次的列标题,这在处理分类数据或者构建具有嵌套结构的报告时非常有用。 ** poi 导出多表头...

    POI实现Excel导入导出并附带加载进度条

    本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,增强了用户体验。 首先,Apache POI的核心类HSSFWorkbook和XSSFWorkbook分别用于处理老版本的.xls和新版本的.xlsx文件。在导入...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    excel poi工具类 导入 导出 合并单元格 计算公式

    这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...

    POI导出Excel表格

    在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    java poi导出excel

    以上就是使用Java POI导出Excel的基本步骤。你可以根据实际需求调整代码,例如添加数据遍历、样式设置、图表生成等功能。确保正确管理资源,避免内存泄漏,特别是在服务器端处理大量数据时。记得在完成后关闭工作簿...

Global site tag (gtag.js) - Google Analytics