公共POI导出Excel方法--java

java poi导入导出excel公共模块工具类-2018-09-05最新更新 本人工作中自己写的一个excel工具类,可以单独打包成jar,作为公共模块使用。 使用它可以直接不用关心poi的api。导入导出,轻轻松松。 使用方法请关注一下,cn.com.flaginfo.biz.excel.test 包下面的Test类。 立即下载

公共POI导出Excel方法–java

最近做了一些数据Excel导出的功能,先是看了很多博客,然后发现都没有公用的方法,但是又发现好像每一次导出都需要写一些差不多类似的代码,后来找到一篇公共导出Excel的方法,https://www.cnblogs.com/coprince/p/5757714.html,但是这位博主好像并没有完全公布出来,然后自己稍微研究了一下在他的源码基础上写了个公共的导出方法。有写的不好的地方大佬可以指点指点

maven依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

代码块

package com.tl.util;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;

public class ExportExcel {

    //显示的导出表的标题
    private String title;
    //导出表的列名
    private String[] rowName ;

    private List<Object[]>  dataList = new ArrayList<Object[]>();

    HttpServletResponse  response;

    //构造方法,传入要导出的数据
    public ExportExcel(String title,String[] rowName,List<Object[]>  dataList){
        this.dataList = dataList;
        this.rowName = rowName;
        this.title = title;
    }

    /*
     * 导出数据
     * */
    public void export(HttpServletResponse response) throws Exception{

        try{
            HSSFWorkbook workbook = new HSSFWorkbook();                        // 创建工作簿对象
            HSSFSheet sheet = workbook.createSheet(title);                     // 创建工作表
            // 产生表格标题行
            HSSFRow rowm = sheet.createRow(0);
            HSSFCell cellTiltle = rowm.createCell(0);
          //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面  - 可扩展】
            HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象
            HSSFCellStyle style = this.getStyle(workbook);                    //单元格样式对象
            sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));  
            cellTiltle.setCellStyle(columnTopStyle);
            cellTiltle.setCellValue(title);
         // 定义所需列数
            int columnNum = rowName.length;
            HSSFRow rowRowName = sheet.createRow(2);                // 在索引2的位置创建行(最顶端的行开始的第二行)
         // 将列头设置到sheet的单元格中
            for(int n=0;n<columnNum;n++){
                HSSFCell  cellRowName = rowRowName.createCell(n);                //创建列头对应个数的单元格
                cellRowName.setCellValue(CellType.STRING.getCode());                //设置列头单元格的数据类型
                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
                cellRowName.setCellValue(text);                                    //设置列头单元格的值
                cellRowName.setCellStyle(columnTopStyle);                        //设置列头单元格样式
            }
            //将查询出的数据设置到sheet对应的单元格中
            for(int i=0;i<dataList.size();i++){

                Object[] obj = dataList.get(i);//遍历每个对象
                HSSFRow row = sheet.createRow(i+3);//创建所需的行数

                for(int j=0; j<obj.length; j++){
                    HSSFCell  cell = null;   //设置单元格的数据类型
                    if(j == 0){
                        cell = row.createCell(j,CellType.NUMERIC);
                        cell.setCellValue(i+1);    
                    }else{
                        cell = row.createCell(j,CellType.STRING);
                        //if(!"".equals(obj[j]) && obj[j] != null){
                            cell.setCellValue(obj[j].toString());                        //设置单元格的值
                       // }
                    }
                    cell.setCellStyle(style);                                    //设置单元格样式
                }
            }
            //让列宽随着导出的列长自动适应
            for (int colNum = 0; colNum < columnNum; colNum++) {
                int columnWidth = sheet.getColumnWidth(colNum) / 256;
                for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
                    HSSFRow currentRow;
                    //当前行未被使用过
                    if (sheet.getRow(rowNum) == null) {
                        currentRow = sheet.createRow(rowNum);
                    } else {
                        currentRow = sheet.getRow(rowNum);
                    }
                    if (currentRow.getCell(colNum) != null) {
                        HSSFCell currentCell = currentRow.getCell(colNum);
                        if (currentCell.getCellTypeEnum() == CellType.STRING) {
                                int length = currentCell.getStringCellValue().getBytes().length;
                                if (columnWidth < length) {
                                    columnWidth = length;
                                }

                        }
                    }
                }
                if(colNum == 0){
                    sheet.setColumnWidth(colNum, (columnWidth-2) * 256);
                }else{
                    sheet.setColumnWidth(colNum, (columnWidth+4) * 256);
                }
            }

            if(workbook !=null){
                try
                {
                    String fileName = title+".xls";
                    fileName = URLEncoder.encode(fileName, "UTF-8");//中文名称
                    String headStr = "attachment; filename=\"" + fileName + "\"";
                    response.setContentType("APPLICATION/OCTET-STREAM");
                    response.setHeader("Content-Disposition", headStr);
                    OutputStream out = response.getOutputStream();
                    workbook.write(out);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }

        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /* 
     * 列头单元格样式
     */    
      public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

            // 设置字体
          HSSFFont font = workbook.createFont();
          //设置字体大小
          font.setFontHeightInPoints((short)12);
          //字体加粗
          font.setBold(true);
          //设置字体名字 
          font.setFontName("Courier New");
          //设置样式; 
          HSSFCellStyle style = workbook.createCellStyle();
          //设置底边框; 
          style.setBorderBottom(BorderStyle.THIN);
          //设置底边框颜色;  
          style.setBottomBorderColor((short)8);//HSSFColor.BLACK.index(过时,替换成(short)8)下面都一样
          //设置左边框;   
          style.setBorderLeft(BorderStyle.THIN);
          //设置左边框颜色; 
          style.setLeftBorderColor((short)8);
          //设置右边框; 
          style.setBorderRight(BorderStyle.THIN);
          //设置右边框颜色; 
          style.setRightBorderColor((short)8);
          //设置顶边框; 
          style.setBorderTop(BorderStyle.THIN);
          //设置顶边框颜色;  
          style.setTopBorderColor((short)8);
          //在样式用应用设置的字体;  
          style.setFont(font);
          //设置自动换行; 
          style.setWrapText(false);
          //设置水平对齐的样式为居中对齐;  
          style.setAlignment(HorizontalAlignment.CENTER);
          //设置垂直对齐的样式为居中对齐; 
          style.setVerticalAlignment(VerticalAlignment.CENTER);

          return style;

      }

      /*  
     * 列数据信息单元格样式
     */  
      public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
            // 设置字体
            HSSFFont font = workbook.createFont();
            //设置字体大小
            font.setFontHeightInPoints((short)11);
            //字体加粗
            //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            //设置字体名字 
            font.setFontName("Courier New");
            //设置样式; 
            HSSFCellStyle style = workbook.createCellStyle();
            //设置底边框; 
            style.setBorderBottom(BorderStyle.THIN);
            //设置底边框颜色;  
            style.setBottomBorderColor((short)8);//HSSFColor.BLACK.index(过时,替换成(short)8)
            //设置左边框;   
            style.setBorderLeft(BorderStyle.THIN);
            //设置左边框颜色; 
            style.setLeftBorderColor((short)8);//HSSFColor.BLACK.index(过时,替换成(short)8)
            //设置右边框; 
            style.setBorderRight(BorderStyle.THIN);
            //设置右边框颜色; 
            style.setRightBorderColor((short)8);
            //设置顶边框; 
            style.setBorderTop(BorderStyle.THIN);
            //设置顶边框颜色;  
            style.setTopBorderColor((short)8);
            //在样式用应用设置的字体;  
            style.setFont(font);
            //设置自动换行; 
            style.setWrapText(false);
            //设置水平对齐的样式为居中对齐;  
            style.setAlignment(HorizontalAlignment.CENTER);
            //设置垂直对齐的样式为居中对齐; 
            style.setVerticalAlignment(VerticalAlignment.CENTER);

            return style;

      }




}

这个导出用到的方法,组装数据的如下:

@RequestMapping("/outPartitionExcel")
    public void outPartitionExcel(Partition partition,HttpServletResponse response) throws Exception {
        List<Partition> Partitions = partitionService.findAllPartitionPage(partition);
        String title = "管理分区";
        String[] rowsName = new String[] {"序号","分拣编码","定区编码","省份","城市","区(县)","关键字","起始号","终止号","单双号","操作人员","操作单位","操作时间"};
        List<Object[]> dataList = new ArrayList<>();
        Object[] objs = null;
        for(int i=0; i<Partitions.size();i++) {
             Partition main = Partitions.get(i);
             objs = new Object[rowsName.length];
             objs[0] = i;
             objs[1] = main.getSortingCode();
             objs[2] = main.getZoneCode();
             objs[3] = main.getProvince();
             objs[4] = main.getCity();
             objs[5] = main.getCounty();
             objs[6] = main.getKeyword();
             objs[7] = main.getStartNumber();
             objs[8] = main.getTerminateNumber();
             objs[9] = main.getsDNumber();
             objs[10] = main.getEmp().getEmpName();
             objs[11] = main.getSyUnits().getName();
              SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String date = df.format(main.getOperationTime());
             objs[12] = date;
             dataList.add(objs);
        }
         ExportExcel ex = new ExportExcel(title, rowsName, dataList);
         ex.export(response);
    }

是通过组装一个List的类型(里面是一些列的导出数据,可以为String/int/long等全部数据类型)。数组rowsName是指导出数据的栏位名称,title是指导出excel的标题

和sheet名。

以以上的数据为例,导出的结果显示如下(只是做了简单的处理,有一些合并行与excel的样式问题没有涉及):

这里写图片描述

有写的不好的地方大佬可以指点指点

公共POI导出Excel方法详解 主要介绍了公共POI导出Excel方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

相关推荐

分布式数据采集框架openclaw-worker:模块化设计与实战指南

数据采集是获取网络信息、实现自动化处理的基础技术,其核心原理是通过模拟HTTP请求从目标源提取结构化数据。在工程实践中,传统单体脚本面临维护困难、扩展性差等挑战。分布式采集架构通过解耦任务定义与执行,结合消息队列实现水平扩展,显著提升了系统的弹性与可靠性。openclaw-worker作为模块化的工作节点,将采集流程配置化,支持CSS选择器、XPath等多种提取规则,并集成请求速率控制、代理IP池等反爬策略,适用于竞品监控、内容聚合等需要高效、稳定获取数据的应用场景。

weixin_28706423的博客 299

简单的Excel导出公共方法类

1.Excel的导出自己写的小的公共类方法,以下代码是公共类 package com.dji.security.util; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; impo

semengzhu的博客 1869

Rk3128投影仪救砖操作和固件分享思路

大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看)

MMX7088的博客 1万+

POI导出Excel的公共方法

poi版本为3.14 公共的导入方法: 第一种实现: /** * 公共的到处excel方法 * @param list 数据集合 * @param map */ public static void excelOutput(List list,LinkedHashMap<String, String> map){

我是混IT圈的 1423

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

VMware Workstation Pro必备技巧:5分钟搞定Ubuntu虚拟机磁盘瘦身(附常见错误解决)

本文详细介绍了如何为VMware Workstation Pro中的Ubuntu虚拟机进行磁盘瘦身,解决.vmdk文件只增不减的问题。通过清理系统垃圾、使用零填充空闲空间,并利用vmware-toolbox-cmd或vmware-vdiskmanager工具进行压缩,可有效回收被无效占用的磁盘空间。文章还提供了常见错误解决方案和预防性维护建议,帮助用户高效管理虚拟机存储。

sea99的博客 297

JAVA公共导出Excel_公共POI导出Excel方法详解

最早开始的时候做过一些数据Excel导出的功能,但是到后期每一次导出都需要写一些差不多类似的代码,稍微研究了一下写了个公共的导出方法。这里用的是POI,然后写成了一个公共类,传入设置好格式的数据,就能弹出下载框。(补充下getResponse的方法,之前没注意这个有继承!)package com.hwt.glmf.common;import java.io.IOException;import j...

weixin_30719609的博客 348

pgsql行列转换

‌是PostgreSQL中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格,每个分割后的部分作为一行‌‌。string_agg() 函数是 PostgreSQL 中的一个聚合函数,用于将一个列中的值连接成一个字符串。

chimchim66的博客 3503

JAVA公共导出Excel_公共POI导出Excel方法–java

packagecom.tl.util;importjava.io.IOException;importjava.io.OutputStream;importjava.net.URLEncoder;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.http.HttpServletResponse;importorg....

weixin_35143502的博客 294

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 423

STM32 之十三 看门狗(WDG)及低功耗下的处理

  最近在做低功耗项目时,遇到了看门狗不好处理的问题。在 ST 的各系列 MCU 中,看门狗应该算是使用配置起来最简单的一个外设了。我们通常仅需要配置很少的配置项,但是,一旦要配合低功耗模式则配置就比较麻烦了。MCU 中有两只狗,一只叫 Independent watchdog (IWDG);另一只叫 System window watchdog (WWDG)。下面是这两只狗的简单介绍! IWDG   IWDG 基本就等同于我们独立使用的看门狗芯片。最适合那些要求看门狗作为一个完全独立的进程在主应用程序之外

技术干货 7852

java poi excel 导出_公共POI导出Excel方法--java

packagecom.hwt.glmf.common;importjava.io.IOException;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.http.HttpServletResponse;importorg.apache.poi.hssf.us...

weixin_42384267的博客 364

大数据知识面试题-Hadoop(2022版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 1万+

java excel poi导出 支持多表头的公共导出方法

java excel poi导出 多表头 导出公共方法

茉么乔的博客 1175

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【转】JAVA公共POI导出Excel方法

  package com.hwt.glmf.common;      import java.io.IOException;      import java.io.OutputStream;      import java.util.ArrayList;      import java.util.List;            import javax.servlet.http.H...

iteye_8157的博客 182

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java用POI导出Excel,利用枚举建立公共方法

poi依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> ...

hgg923的专栏 3243

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

公共POI导出Excel方法–java

最近做了一些数据Excel导出的功能,先是看了很多博客,然后发现都没有公用的方法,但是又发现好像每一次导出都需要写一些差不多类似的代码,后来找到一篇公共导出Excel的方法,https://www.cnblogs.com/coprince/p/5757714.html,但是这位博主好像并没有完全公布出来,然后自己稍微研究了一下在他的源码基础上写了个公共的导出方法。有写的不好的地方大佬可以指点指点 ...

weixin_30641465的博客 128

使用POI方式导出Excel

转自:https://www.cnblogs.com/coprince/p/5757714.html数据导出到Excel几乎是所有客户都会提出的一个需求。首先需要引入的jar包:最早开始的时候做过一些数据Excel导出的功能,但是到后期每一次导出都需要写一些差不多类似的代码,稍微研究了一下写了个公共的导出方法。这里用的是POI,然后写成了一个公共类,传入设置好格式的数据,就能弹出下载框。packa...

Brave_Jiang7的博客 426

导出Excel公共方法

package com.jk.utils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayLis...

qq_42246561的博客 431

文件导出的公共方法

/** * *@注释 导出公共方法 *@方法名称 genExport * @param title * @param column * @param date * @param filename * @throws Exception */ public static void genExport(String title, Map<String,S...

Z_passionate的博客 518

Excel导入导出工具

Excel导入导出时错误信息优雅的返回

qq_43419105的博客 300

在页面中的数据导出excel操作

在现在的很多开发中,为了方便很多需求就是把excel的内容通过上传的方式导入到数据库中。接下来主要讲述该功能的开发步骤。第一部分:导出(1):在页面中添加 如下代码: &lt;!-- 导出 --&gt; &lt;iframe id="dataExportIframe" src="" width="0" height="0"  style="display: none"&gt;&

wszhm123的博客 4589
下一篇: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one默认服务器时区问题mysql
Hello_L_
博客等级 码龄8年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值