java简单的导出Excel文件

Wesley13
• 阅读 891

特点 列出List中要导入到Excel的列名#中文名,然后就完事了。具体的看看main()你就知道有多简单了。

利用POI,本工具类可以实现Excel导出和下载,话不多说,放码过来。 

package com.fantong.ois.wms.utils;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 导出或下载Excel,
 * Title: ExportXls<br>
 * Description: 用#分割列与转义标题 ;标题包含*表示需要过滤该列<br>
 * @author xiaour@github.com
 * @createDate 2016年5月31日
 * @version v1.0
 */
public class ExportXls {
    
    private OutputStream out;//传入OutputStream表示写入到服务器,传入HttpServletResponse则直接下载
    
    private static String tag="#";//标题与字段分割符
    private static String hidden="*";//隐藏标识符

       public ExportXls(OutputStream out) {
        super();
        this.out = out;
    }

    /**
        * 
        *@category
     *@throws IOException
        *@createDate 2016年5月31日
     * @param sheetName
     * @param titles 字段名#中文列名
     * @param list
     * */
       @SuppressWarnings({"deprecation" })
       public void exportExcel(String sheetName, String[] titles, List<Map<String, Object>> list) throws IOException {
          // 声明一个工作薄
          @SuppressWarnings("resource")
        HSSFWorkbook workbook = new HSSFWorkbook();
          // 生成一个表格
          HSSFSheet sheet = workbook.createSheet(sheetName);
          // 设置表格默认列宽度为15个字节
          sheet.setDefaultColumnWidth((short) 20);
          // 生成一个样式
          HSSFCellStyle style = workbook.createCellStyle();
          // 设置这些样式
          style.setFillForegroundColor(HSSFColor.TEAL.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
          style.setBorderRight(HSSFCellStyle.BORDER_THIN);
          style.setBorderTop(HSSFCellStyle.BORDER_THIN);
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          // 生成一个字体
          HSSFFont font = workbook.createFont();
          font.setColor(HSSFColor.WHITE.index);
          font.setFontHeightInPoints((short) 14);
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          // 把字体应用到当前的样式
          style.setFont(font);
          //产生表格标题行
          HSSFRow row = sheet.createRow(0);
          sheet.createFreezePane( 0, 1, 0, 1 );  
          for (int i = 0; i < titles.length; i++) {
              if(titles[i].indexOf(hidden)<0){
                 HSSFCell cell = row.createCell(i);
                 cell.setCellStyle(style);
                 HSSFRichTextString text=null;
                 if(titles[i].indexOf(tag)>0){
                     text = new HSSFRichTextString(titles[i].split(tag)[1]);
                 }else {
                     text = new HSSFRichTextString(titles[i]);
                 }
                 cell.setCellValue(text);
              }
          }
              String value="";
         for(int j=1;j<list.size()+1;j++){
             Map<String, Object> map=list.get(j-1);
             row = sheet.createRow(j);
             for(int s=0;s<titles.length;s++){
                 if(titles[s].indexOf(hidden)<0){
                     HSSFCell txtCell = row.createCell(s);
                     if(map!=null){
                         Object obj=null;

                         if(titles[s].indexOf(tag)>0){
                             obj=map.get(titles[s].split(tag)[0]);
                         }else {
                             obj=map.get(titles[s]);
                         }
                         String temp=obj!=null?obj.toString():"";
                         value= temp.toString();
                     }
                     HSSFRichTextString text2 = new HSSFRichTextString(value);
                     txtCell.setCellValue(text2);
                }
             }
         }


         workbook.write(out);
         out.flush();
         out.close();

       }

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

               //写入本地
           OutputStream out = new FileOutputStream("d://1432026362899.xls");
           ExportXls ex = new ExportXls(out);
           String [] headers={"A#标题1","B#标题2","C#标题3*"};

              List<Map<String,Object>> dataList= new ArrayList<Map<String,Object>>();
                  for(int j=0;j<headers.length;j++){
                      Map<String,Object> map= new HashMap<String,Object>();
                      map.put("A",j+1);
                      map.put("B",new BigDecimal("580.63"));
                      map.put("C",null);
                      dataList.add(map);
                  }
                  
             ex.exportExcel("TEST",headers,dataList);
             out.close();
             System.out.println("excel导出成功!");

       }
           
}

上面有测试类可以直接导出到本地,下面看看怎么直接打开连接就下载吧!

    @ResponseBody
    @RequestMapping(value = "/download", method = { RequestMethod.GET, RequestMethod.POST })
    public void download(HttpServletResponse response){
        try {

                response.setContentType("application/x-msdownload");

                response.setHeader("Content-Disposition", "attachment; filename='xiaour@github.com.xls'");

                response.setCharacterEncoding("utf-8");

                //可以将output输出到服务器
                OutputStream outputStream=response.getOutputStream();

                ExportXls ex = new ExportXls(outputStream);

                String [] headers={"id#编号","name#名称","operation_time#最近更新时间"};

                ex.exportExcel("报表",headers,dataList);

            }

        } catch (Exception e) {
            logger.error(e);
        }
    }
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
vue+iview中的table表格导出excel表格
一、iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件。二、实现table表格导出excel文件利用Blob.js和Export2Excel.js两个文件实现  1.Blob.js和Export2Excel.js文件    链接:https://pan.baid
Wesley13 Wesley13
3年前
java使用POI将数据导出放入Excel
本文主要是将数据库取出的数据按照自定义的行列格式导出到excel中,POI则是实现我们需求所用到的技术。POI介绍使用springboot导入相关依赖获取数据(自行处理)完整代码实例:创建excel,将数据写入excel1.POI介绍要想使用POI对Excel进行操作,我们需要先了
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java导出多sheet的excel
excel工具类,适合单sheet或多sheet的excel表格导出packageUtil;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.\;importjavax.servlet.ServletOut
Stella981 Stella981
3年前
HuTool工具类使用之Excel文档的导入导出
HuTool工具类使用之Excel文档的导入导出前言在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel导入导出功能,可以大幅度减少今后开发中Excel的导入导出的相关操作。
Wesley13 Wesley13
3年前
Java解析excel工具easyexcel助你快速简单避免OOM[图]
Java解析excel工具easyexcel助你快速简单避免OOM\图\Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗
Stella981 Stella981
3年前
EasyExcel写入百万级数据到多sheet
EasyExcel是什么?快速、简单避免OOM的java处理Excel工具一、项目需求    从mongo库中查询数据,导出到excel文件中。但是动态导出的excel有多少列、列名是什么、有多少sheet页都需要动态获取。所以生成的excel也必须是动态生成,不能通过注解配置对象映射。而且写入的数据量,有可能达到100W级,使用传统的PO
Wesley13 Wesley13
3年前
Java使用POI实现对Excel文件的读写
ApachePOI提供了Java程序读取和写入MSOffice文档的接口。对于Excel文档读写:HSSF:提供读写MSExcel的xls文件的功能。XSSF:提供读写MSExcel的xlsx文件的功能。Java使用POI实现对Excel文件的读写操作本篇的ExcelUtils工具类,主要针对于\\一行数据(row)作为
Wesley13 Wesley13
3年前
Excel导出工具类.
 Excel导出工具类.POIimport java.io.OutputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.uti
LeeFJ LeeFJ
1年前
Foxnic-SQL (15) —— 使用记录集导入或导出Excel
很多时候,我们需要将外部Excel表中的数据导入到数据库,或是需要将某个查询结果导出到Excel文件中,对于这种简单的操作,FoxnicSQL已经内置了ExcelReader和ExcelWriter用于处理Excel数据。本文中的示例代码均可在https://gitee.com/LeeFJ/foxnicsamples项目中找到。读取Excel到RcdSetFoxnicSQL使用ExcelReader类读取Excel中某个sheet的数据,这些数据将被读取到RcdSet,通过RcdSet可以完成数据库保存等操作。在读取Excel前需要定义Excel结构,将Excel列映射到数据库字段,如下代码所示。一旦Excel数据转换成RcdSet,开发人员就可以去做其它更多额外的数据处理。