`

web项目导出excel表格

 
阅读更多
该功能涉及到两个知识点,一是制作excel相关插件的使用,二是导出文件,spring-mvc该如何配置
先说excel插件的使用,这次使用的是org.apache.poi包,版本是3.9,下面粘完整能运行的代码
maven依赖
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>

插件的实体类,也可以理解为参数,这里采用了build设计模式,好处是初始化了一些默认值,使用的时候代码写的方便。针对表格导出,我觉得三个参数足够了,标题、表头以及数据,所以,这三个参数构造方法我设计的必传,其它使用默认参数
package com.util;

import java.util.List;

public class ExcelParam {
    String name;
    int width;
    String font;
    String[] headers;
    /**
     * 导出数据的样式
     * 1:String left;
     * 2:String center
     * 3:String right
     * 4 int  right
     * 5:float ###,###.## right
     * 6:number: #.00% 百分比 right
     */
    int[] ds_format;
    /**
     * 每列表格的宽度,默认为256 * 14
     */
    int[] widths;
    List<String[]> data;

    private ExcelParam() {

    }
    //使用Builder模式,设置默认参数和必填参数
    public static class Builder {
        String name;
        int width = 256 * 14;
        String font = "微软雅黑";
        String[] headers;
        int[] ds_format;
        int[] widths;
        List<String[]> data;

        public Builder(String name) {
            this.name = name;
        }

        public Builder font(String font) {
            this.font = font;
            return this;
        }

        public Builder width(int width) {
            this.width = width;
            return this;
        }

        public Builder headers(String[] headers) {
            this.headers = headers;
            return this;
        }

        public Builder ds_format(int[] ds_format) {
            this.ds_format = ds_format;
            return this;
        }

        public Builder widths(int[] widths) {
            this.widths = widths;
            return this;
        }

        public Builder data(List<String[]> data) {
            this.data = data;
            return this;
        }

        public ExcelParam build() {
            ExcelParam excelParam = new ExcelParam();
            excelParam.name = this.name;
            excelParam.data = this.data;
            excelParam.widths = this.widths;
            excelParam.ds_format = this.ds_format;
            excelParam.headers = this.headers;
            excelParam.font = this.font;
            excelParam.width = this.width;
            return excelParam;
        }
    }
}
package com.ucredit.util;

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

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

public class ExcelUtil {
    private ExcelUtil() {
    }

    public static void export(ExcelParam excelParam, HttpServletResponse response) throws IOException {
        if (excelParam.widths == null) {
            excelParam.widths = new int[excelParam.headers.length];
            for (int i = 0; i < excelParam.headers.length; i++) {
                excelParam.widths[i] = excelParam.width;
            }
        }
        if (excelParam.ds_format == null) {
            excelParam.ds_format = new int[excelParam.headers.length];
            for (int i = 0; i < excelParam.headers.length; i++) {
                excelParam.ds_format[i] = 1;
            }
        }
        //创建一个工作薄
        HSSFWorkbook wb = new HSSFWorkbook();
        //创建一个sheet
        HSSFSheet sheet = wb.createSheet("excel");
        int rowCount = 0;
        if (excelParam.headers != null) {
            HSSFRow row = sheet.createRow(rowCount);
            //表头样式
            HSSFCellStyle style = wb.createCellStyle();
            HSSFFont font = wb.createFont();
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            font.setFontHeightInPoints((short) 11);
            style.setFont(font);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

            for (int i = 0; i < excelParam.headers.length; i++) {
                sheet.setColumnWidth(i, excelParam.widths[i]);
                HSSFCell cell = row.createCell(i);
                cell.setCellValue(excelParam.headers[i]);
                cell.setCellStyle(style);
            }
            rowCount++;
        }
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //表格主体  解析list
        for (int i = 0; i < excelParam.data.size(); i++) {  //行数
            HSSFRow row = sheet.createRow(rowCount);
            for (int j = 0; j < excelParam.headers.length; j++) {  //列数
                HSSFCell cell = row.createCell(j);
                cell.setCellValue(excelParam.data.get(i)[j]);
                cell.setCellStyle(style);
            }
            rowCount++;
        }
        //设置文件名
        String fileName = excelParam.name + ".xls";
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setHeader("Pragma", "No-cache");
        OutputStream outputStream = response.getOutputStream();
        wb.write(outputStream);
        outputStream.flush();
        outputStream.close();
    }
}

其实从这个方法就能看出,文件最后导出,实际上是往response中的outputStream中写入文件,之后的工作是由浏览器来完成的
controller层写法
    @RequestMapping(value = "download")
    public void download(@RequestParam String username,
                         @RequestParam String operation_module,
                         @RequestParam String operation_type,
                         @RequestParam String start_time,
                         @RequestParam String end_time,
                         HttpServletResponse response) throws Exception {
        List<OperationLogEntity> list = operationLogDao.get(username, operation_module, operation_type, start_time, end_time);
        String[] heads = {"序号", "账号", "姓名", "操作类型", "操作模块", "处理员工号码", "处理结果", "登录IP", "时间", "所在城市"};
        List<String[]> data = new LinkedList<>();
        for (int i = 0; i < list.size(); i++) {
            OperationLogEntity entity = list.get(i);
            String[] temp = new String[10];
            temp[0] = String.valueOf(i + 1);
            temp[1] = entity.getUsername();
            temp[2] = entity.getName();
            temp[3] = entity.getOperation_type();
            temp[4] = entity.getOperation_module();
            temp[5] = entity.getProcess_number();
            temp[6] = entity.getProcess_result();
            temp[7] = entity.getIp();
            temp[8] = DateUtils.getDateBeforeOrAfterStrCN(entity.getOperation_time(), 0);
            temp[9] = entity.getCity();
            data.add(temp);
        }
        ExcelParam param = new ExcelParam.Builder("操作日志").headers(heads).data(data).build();
        ExcelUtil.export(param, response);
    }

实际使用
//这样写很简洁
ExcelParam param = new ExcelParam.Builder("操作日志").headers(heads).data(data).build();
分享到:
评论

相关推荐

    简单的导出excel表格列子

    总结来说,这个“简单的导出excel表格列子”提供了一种实用且高效的方法,通过纯JavaScript在Web页面上实现Excel导出功能,无需依赖任何插件,代码简洁易懂,对开发者来说具有很高的学习价值。通过阅读和实践压缩包...

    POI导出Excel表格

    本项目是关于如何使用POI库导出Excel表格的一个实例,其中包括了必要的代码组件和配置文件。以下是关于POI导出Excel表格的相关知识点的详细解释。 1. **Apache POI库**: Apache POI 是一个开源项目,它提供了一组...

    poi导出excel表格

    本教程将详细讲解如何使用Apache POI在Web环境中导出Excel表格,避免生成不必要的临时文件,从而优化系统资源管理。 一、Apache POI简介 Apache POI 是一个开源项目,它提供了Java API来处理Microsoft的Office格式...

    java及jsp下导出excel表格

    ### Java与JSP环境下导出Excel表格:深入解析与实践 在现代企业级应用开发中,数据导出至Excel表格是一种常见的需求,特别是在报表、数据分析和数据交换等场景中。Java作为一种广泛使用的后端开发语言,配合JSP...

    gridview导出excel表格

    ### GridView导出为Excel表格知识点解析 #### 一、引言 在Web应用程序开发中,经常需要处理数据展示和导出的需求。其中,GridView作为ASP.NET中一个非常强大的控件,能够方便地显示数据源中的数据,并支持多种交互...

    java导出Excel表格实例

    在本文档中,我们将详细介绍如何使用Java编写程序,将数据库中的数据以Excel表格的形式导出。这是通过操作Excel文件对象模型以及Java的数据库操作技术实现的。为了更好地理解本文所包含的知识点,需要掌握Java语言...

    easypoi导入导出excel表格.pdf

    在使用easypoi库进行Java项目的Excel表格导入导出时,开发者需要重视其依赖的引入,理解各注解的用途,以及能够解决使用过程中可能出现的类找不到或者依赖冲突等错误。另外,合理使用文档资源,跟进库的版本更新,也...

    导出excel表格的jar包.zip

    在Java web开发中,导出Excel表格是一项常见的需求,例如为了数据分析、报表生成或数据交换。本资源"导出excel表格的jar包.zip"提供了一组必要的库文件,帮助开发者轻松实现这一功能。以下是相关知识点的详细介绍: ...

    PHPCMS-formguide_export_utf-8-导出EXCEL表格功能

    "导出EXCEL表格"是指系统提供了将这些数据导出为Microsoft Excel格式的功能,便于进一步的数据分析、报表制作或与其他系统进行数据交换。 PHPCMS是一款开源的Web内容管理系统,它提供了一系列强大的功能,如内容...

    c#导入导出程序 用于导入和导出Excel表格,包括各种格式的设定

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Web应用程序时。"导入导出程序"是指能够处理数据输入...通过这个程序,用户可以方便地导入和导出Excel数据,提高工作效率,同时也为企业提供了数据交换的标准接口。

    简单实用网页表格数据导出Excel电子表格文件jQuery插件

    本项目"简单实用网页表格数据导出Excel电子表格文件jQuery插件"正是为了解决这一问题。 首先,我们来探讨jQuery的核心概念。jQuery简化了JavaScript的DOM操作,提供了统一的API来选择元素、添加事件处理程序、执行...

    SSM和EasyUI结合将数据导出表格.zip

    本项目通过这种方式,提供了一种将数据库中的数据导出为Excel表格的方法。 首先,Spring作为核心框架,负责管理应用的bean和依赖注入,提供了AOP(面向切面编程)功能,以及对事务的管理。SpringMVC则主要负责处理...

    导出Excel表格文件

    总的来说,导出Excel表格文件是Web应用中常见的功能,通过结合Gridview控件和Excel API,我们可以方便地将数据从数据库或其他数据源转换成用户友好的Excel格式,满足数据分析和报告的需求。这个过程涉及到了数据操作...

    Flex3ReadWriteExcel(flex3导入导出excel表格)

    本知识点主要聚焦于Flex3如何实现数据的读写操作,特别是与Microsoft Excel文件的交互,即“Flex3ReadWriteExcel(flex3导入导出excel表格)”。这在实际业务场景中非常常见,例如数据分析、报表生成以及数据交换等。 ...

    java导出excel 在web项目

    Java导出Excel在Web项目中的应用是一个常见的需求,特别是在企业级开发中,为了方便数据的存储、分析和传输,往往需要将数据库中的数据导出为Excel格式。下面将详细介绍这个主题,包括相关技术和实现步骤。 1. **...

    用jquery-table2excel,进行导出excel表格 带图片 jquery.table2excel.js下载

    在现代Web应用中,数据的导入导出功能是不可或缺的一部分,特别是导出表格到Excel,以便用户可以方便地处理和存储数据。`jquery-table2excel`是一个jQuery插件,专门用于实现这一功能,允许用户从网页上的HTML表格...

    web 导出EXCEL

    在Web应用中,导出Excel是一项常见的需求,用于将网页上的数据转化为用户可编辑和分析的电子表格格式。"Web导出EXCEL"的技术主要...在实践中,根据项目需求和资源选择合适的技术栈,是构建高效Web导出Excel功能的关键。

    asp.net web 数据库导出Excel

    ### ASP.NET Web 数据库导出Excel知识点解析 #### 一、导出Excel功能概述 在ASP.NET Web应用程序中实现数据库数据导出至Excel文件的功能,是很多业务场景下的常见需求。这种功能不仅可以方便用户查看和处理数据,...

    asp.net里导出excel表方法汇总

    ### ASP.NET 中导出 Excel 表的方法汇总 在 ASP.NET 应用程序中,导出数据到 Excel 是一个常见的需求。下面将详细介绍 ASP.NET 中几种常见的导出 Excel 的方法及其实现原理。 #### 方法一:使用 DataSet 直接生成 ...

    NOPI导出EXCEL/xls/xlsx并输出到WEB页面

    标题 "NOPI导出EXCEL/xls/xlsx并输出到WEB页面" 描述的是一个使用NOPI(可能是某种特定的开发框架或库)处理Excel文件并将其数据展示在Web页面上的过程。NOPI允许开发者执行Excel文件的导入、导出以及下载功能,同时...

Global site tag (gtag.js) - Google Analytics