`

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 导出多表头...

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

    poi导出excel生成下拉列表

    poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列

Global site tag (gtag.js) - Google Analytics