利用 POI 从JSP表格中生成excel文件

jsp 中poi 实现导入导出excel 本例试用poi 3.0,jdk1.4,weblogic8.13,sqlserver20001.excel导入数据导入时候注意数字类型和字符类型的区别,数字类型要在excel中设置数字类型,对应数据库中也应该建立对应类型 String result = "";String contracId = "";String projectname = "";double projects 阅读详情

 我研究了一天,终于得到了比较满意的效果。其中遇到了各种问题,着实耗费了不少时间。

在项目中,你可能会遇到将JSP中表格的数据生成报表的应用,下面我介绍下我的做法。

因为我的这个项目是用STRUTS 2.0做的,在需要生成报表的这个页面,我新建了一个Button,用来生成excel文件

代码如下:

<table border="0" cellpadding="0" cellspacing="0" width="100%">    
<tr>
<td align=center>
<INPUT class=button type="button" value="生成Excel文件" name="ebotton" onClick="submitform();">
</td>
</tr>
</table>

注意到我处理点击的函数是submitform();它的定义在JS里面。如下:

function submitform()
{

 window.document.myform.action 
= 'export.jsp';
 myform.submit();
   
}

这里的myform.submit()将form又提交了一遍,对,这很有用,因为一般一个form有一个提交。我这里action后面跟了个静态页面(其实也是可以跟动态action的,原先我就是这样,想尽量把JAVA代码从页面剥离出来,但后来遇到了一个问题,只好改成页面了),而这个页面就是处理“生成excel”这个动作的。

下面是这个页面的代码:

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding
="gb2312"%>
<%@ page language="java"  import="java.util.*,
                                  org.apache.poi.hssf.usermodel.HSSFWorkbook,
                                  org.apache.poi.hssf.usermodel.HSSFSheet,
                                  org.apache.poi.hssf.usermodel.HSSFRow,
                                  org.apache.poi.hssf.usermodel.HSSFCell,
                                  java.text.DecimalFormat,
                                  com.justinmobile.payease.admin.commons.excel.XLSExport
"%>
<%
    response.reset();
    response.setContentType(
"application/ms-excel");
    response.setHeader(
"Content-disposition","attachment;filename=untitled.xls");//定义文件名
    DecimalFormat f = new DecimalFormat("#,##0.00");
    HSSFWorkbook wb 
= new HSSFWorkbook();
    HSSFSheet sheet 
= wb.createSheet("sheet1");
    String[] sellCoName 
= request.getParameterValues("sellCoName");
    String[] signAdd 
= request.getParameterValues("signAdd");
    String[] implementYear 
= request.getParameterValues("implementYear");
    String[] sellLicence 
= request.getParameterValues("sellLicence");
    String[] signTime 
= request.getParameterValues("signTime");
    String[] buySheetSymbol 
= request.getParameterValues("buySheetSymbol");
    String[] goodsName 
= request.getParameterValues("goodsName");
    String[] goodModel 
= request.getParameterValues("goodModel");
    String[] unit 
= request.getParameterValues("unit");
    String[] amount 
= request.getParameterValues("amount");
    String[] examinantLX 
= request.getParameterValues("examinantLX");
    String[] examinantParentCompany 
= request.getParameterValues("examinantParentCompany");
    String[] buySheetID 
= request.getParameterValues("buySheetID");
    String[] coName 
= request.getParameterValues("coName");
    String[] examinantChildCompany 
= request.getParameterValues("examinantChildCompany");
    
    
    
//XLSExport e = new XLSExport(response);
    XLSExport e = new XLSExport(response);
    
int row=0;//标示行数
    
    e.createRow(
0);
    row
++;
    e.setCell(
0, " 销售单位 ");
    e.setCell(
1, " 签订地址 ");
    e.setCell(
2, " 执行年度 ");
    e.setCell(
3, " 销售许可证号 ");
    e.setCell(
4, " 签订时间 ");
    e.setCell(
5, " 合同编号 ");
    
    e.createRow(
1);
    row
++;
    
for(int j=0;j<sellCoName.length;j++){
    e.setCell(
0, sellCoName[j]);
    e.setCell(
1, signAdd[j]);
    e.setCell(
2, implementYear[j]);
    e.setCell(
3, sellLicence[j]);
    e.setCell(
4, signTime[j].toString());
    e.setCell(
5, buySheetSymbol[j]);
    }

    e.createRow(
2);
    row
++;
    
    e.createRow(
3);
    row
++;
    e.setCell(
0, " 产品名称 ");
    e.setCell(
1, " 规格型号 ");
    e.setCell(
2, " 计量单位 ");
    e.setCell(
3, " 数量 ");
    e.setCell(
4, " 供货单位 ");
    
    
int i = 0;
    
for (i = 0; i < goodsName.length; i++) {
    e.createRow(i
+4);
        e.setCell(
0, goodsName[i] );
        e.setCell(
1, goodModel[i] );
        e.setCell(
2, unit[i]);
        e.setCell(
3, amount[i]);
        e.setCell(
4, coName[i]);
        row
++;
    }

    
    e.createRow(row
+1);
    e.setCell(
0, "联兴批准人");
    e.setCell(
1, "总公司确认人");
    e.setCell(
2, "分公司确认人");
    
    e.createRow(row
+2);
    
for(int k=0;k<examinantLX.length;k++){
    e.setCell(
0, examinantLX[k]);
    e.setCell(
1, examinantParentCompany[k]);
    e.setCell(
2, examinantChildCompany[k]);
    }

    e.exportXLS();
    wb.write(response.getOutputStream());
    response.getOutputStream().flush();
    response.getOutputStream().close();
   
    out.clear();
    out 
= pageContext.pushBody();  
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

代码比较长,希望你有耐心。这里新建了XLSExport的一个对象(这个类呆会给出),调用这里面已经写好的向excel表中添数据的方法能比较清晰的进行添表操作。注意,这几行

    response.getOutputStream().flush();
    response.getOutputStream().close();
  
    out.clear();
    out = pageContext.pushBody();

一定不要掉,因为JSP的内建对象out与  response.getOutputStream()会产生冲突,使用完out必须要清除缓存的数据,不加便会出现异常。

下面是XLSExport。这个总是有用

 

package com.justinmobile.payease.admin.commons.excel;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/** */
/**
 * 生成导出Excel文件对象
 * 
 * 
 
*/

public class XLSExport {

    
// 设置cell编码解决中文高位字节截断
    private static short XLS_ENCODING = HSSFWorkbook.ENCODING_UTF_16;

    
// 定制日期格式
    private static String DATE_FORMAT = " m/d/yy ";

    
// 定制浮点数格式
    private static String NUMBER_FORMAT = " #,##0.00 ";

    
private HSSFWorkbook workbook;

    
private HSSFSheet sheet;

    
private HSSFRow row;
    
    
private HttpServletResponse response;

    
/**
     * 初始化Excel
     *            导出文件名
     
*/

    
public XLSExport(HttpServletResponse response) {
        
//this.xlsFileName = fileName;
        this.response=response;
    
        
this.workbook = new HSSFWorkbook();
        
this.sheet = workbook.createSheet();
    }


    
/** */

    
/**
     * 导出Excel文件
     * 
@throws IOException
     * 
@throws XLSException
     
*/

    
public void exportXLS() throws IOException {

        response.setContentType(
"application/vnd.ms-excel");
                                          response.addHeader(
"Content-Disposition", "attachment; filename=untitled.xls");
        
        workbook.write(response.getOutputStream());
        response.getOutputStream().flush();
        response.getOutputStream().close();
        
    }



    
/**
     * 增加一行
     *            行号
     
*/

    
public void createRow(int index) {
        
this.row = this.sheet.createRow(index);
    }



    
/**
     * 设置单元格
     *            单元格填充值
     
*/

    
public void setCell(int index, String value) {
        HSSFCell cell 
= this.row.createCell((short) index);
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell.setEncoding(XLS_ENCODING);
        cell.setCellValue(value);
    }


    
/**
     * 设置单元格

     *            单元格填充值
     
*/

    
public void setCell(int index, Calendar value) {
        HSSFCell cell 
= this.row.createCell((short) index);
        cell.setEncoding(XLS_ENCODING);
        cell.setCellValue(value.getTime());
        HSSFCellStyle cellStyle 
= workbook.createCellStyle(); // 建立新的cell样式
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT)); // 设置cell样式为定制的日期格式
        cell.setCellStyle(cellStyle); // 设置该cell日期的显示格式
    }


    
/**
     * 设置单元格
     *            单元格填充值
     
*/

    
public void setCell(int index, int value) {
        HSSFCell cell 
= this.row.createCell((short) index);
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        cell.setCellValue(value);
    }


    
/**
     * 设置单元格
     *            单元格填充值
     
*/

    
public void setCell(int index, double value) {
        HSSFCell cell 
= this.row.createCell((short) index);
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        cell.setCellValue(value);
        HSSFCellStyle cellStyle 
= workbook.createCellStyle(); // 建立新的cell样式
        HSSFDataFormat format = workbook.createDataFormat();
        cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); 
// 设置cell样式为定制的浮点数格式
        cell.setCellStyle(cellStyle); // 设置该cell浮点数的显示格式
    }


}

这样应该很清楚了!

SSM 框架整合POI插件技术导出EXCEL文件 前言本次实践的项目过程当中,对于基于SSM框架实现的项目过程,其中涉及到了前端导出EXCEL的过程进行整理和汇总,同时对于在网上查找到的资料等进一步进行解释和理解,对于网络中的资料,总是会有些不适合自己项目的地方,这个也是大家在学习过程当中会遭遇到,因为别人描述的问题,是他遇到的,而这次个人遇见,总结了下,可能会是大家都能遇见的实现较为复杂的SQL拼接出来的实现的表格导出下载成为EXCEL文件。由... 阅读详情

相关推荐

JSP读取Excel表格列数据源码解析

Apache POI 是一个功能强大、灵活性高的 Java 库,支持读写 Excel(.xls 和 .xlsx)、Word(.doc 和 .docx)等多种 Office 格式文件。其核心组件包括 HSSF、XSSF 和 SXSSF,分别对应 Excel 2003、Excel 2007+ 和大数据量优化的模型。本章详细介绍了Servlet在Excel处理流程中的核心作用,包括文件上传、数据解析、异常处理与请求转发等关键步骤。

weixin_34718952的博客 996

Java中导入、导出Excel

一、介绍   当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用。   目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel ...

weixin_34034670的博客 2727

JSP页面实现Excel表格导入导出的实战指南

Apache POI提供了简单易用的API,允许开发者在Java应用程序中直接操作Microsoft Office的文件格式。尽管它的主要功能是处理Excel文件(通过HSSF和XSSF组件),但它还支持处理Word(通过HWPF组件)和PowerPoint文件(通过HSLF组件)。

weixin_42504649的博客 847

利用jsp导出excel(菜鸟篇)

由于经常到本站找前辈们的资料,觉得非常方便,加上本人记忆力十分差劲,所以今天开博上来保存一些资料,如果恰好有人能用的到希望也能给大家点启发 最近要做报表,导出excel是必须的,所以本人提前准备了一下,本着偷懒的想法(汗~杂说漏了)本人决定用jsp导出 方法2种:     第一种:poi+jsp导出excel &lt;%@ page language="java" contentTyp...

hygj1126的博客 523

JSP页面实现Excel表格导出导入的实践指南

JSTL(JavaServer Pages Standard Tag Library)为JSP页面提供了更加强大和灵活的标签。它主要包括核心标签库、格式化标签库和函数标签库。JSTL能够帮助开发者更加简洁地执行迭代、条件判断、国际化以及数据格式化等操作。这一章节将深入分析JSTL标签的使用,以及如何将它们集成到JSP页面中来提高开发效率和代码可维护性。Apache POI是Apache软件基金会的一个开源项目,它提供了操作Microsoft Office文档的Java API。

weixin_42181686的博客 751

jsp利用POI生成Excel并在页面中导出的示例

本篇文章主要是介绍jsp利用POI生成Excel并在页面中导出的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

jsp(servlet)使用poi导出excel数据文件

网站通过Excel导出数据已经成为各种网站的一个基本功能,下面就详细介绍下如何使用poi.jar方式来导出excel文件。具体步骤如下: 1、创建一个网站,下面我创建一个叫test的网站,然后将poi的jar包放入lib文件夹。我这里是下载链接poi-2.5.1.jar. 结构目录如下: 2、然后我们可以创建一个用来访问的jsp界面(主要是提交到servlet,可有可无) 代码如下

日积月累,水滴石穿 4523

stm32入门 点亮TFTLCD(NT35510驱动)

正点原子stm32f407探索者开发板屏幕使用正点原子4.3寸TFTLCDstm32f407开发使用标准库本文参考正点原子例程和NT35510的data sheet,尽量使用最少的代码点亮屏幕。

tangliang_cn的博客 1984

jsp 导出excel

第一种:poi+jsp导出excel Jsp代码 1. 2. 3. 4. 5. 6. 7. 8. poi的包不多说了 剩下的就是jsp设置和自己用到的其他包 Jsp全部代码代码 1. 2. 3. 4. 5. 6. 7. 8. ...

流浪学习 243

Sparse4Dv3

instance_feature也设置为nn.Parameter。修正分支2*(linear->relu->linear->relu->layernorm)->linear->scale,分类分枝2*(linear->relu->layernorm)->linear(256,9),质量评估分枝2*(linear->relu->layernorm)->linear(256,2)。每组两类instance,1是加上范围(-x,x)内均匀分布噪声,2是加上(-2x,-x)U(x,2x)范围内均匀分布噪声。

yuanl15的博客 1352

一文读懂,WMS仓库管理系统模块功能

对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。

深蓝易网的博客 5219

jsp利用POI直接生成Excel并在页面中导出

 java中导出Excel有两个组件可以使用,一个是jxl,一个是POI,我这里用的是POI。导出是可以在服务器上生成文件,然后下载,也可以利用输出流直接在网页中弹出对话框提示用户保存或下载。生成文件的方式会导致服务器中存在着垃圾文件,实现方式不太优雅,所以这里我采用的是后面直接通过输出流的方式。1、修改WEB服务器的CONF/web.xml,添加            xls       

不随黄叶舞秋风 1万+

AI大模型API中转站选型指南:12项关键指标与实战评估

随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实

weixin_29056101的博客 448

利用poi从jsp页面导出报表到excel

一个excel表格: HSSFWorkbook wb = new HSSFWorkbook(); 一个工作表格(sheet): HSSFSheet sheet = wb.createSheet("测试表格"); 一行(row): HSSFRow row1 = sheet.createRow

chenfeiguo的博客 6797

VMware共享磁盘配置实战:从零搭建多机共享存储环境

本文详细介绍了在VMware环境中从零开始配置共享磁盘的完整实战流程。通过创建共享磁盘、挂载至多台虚拟机并修改.vmx配置文件等关键步骤,帮助用户搭建可用于数据库集群(如Oracle RAC)测试的多机共享存储环境,并提供了核心参数设置与常见问题排查指南。

weixin_29284201的博客 493

记一次从零到getshell的渗透历程

0x00 前期 拿到测试范围清单后,首先用脚本获取了下各个子站的标题,基本都是XXX管理系统。浏览器查看后,各个子站也大同小异,纯登录系统,带验证码。这些系统基本都是jsp写的,逮到了两个没有验证码的小宝贝,一番暴力破解,小宝贝对我说:别爱我,没结果。又看到了两个站返回的Set-Cookie头:rememberMe=deleteMe; 很明显,这是Apache Shiro。打了一波exp,没有反应,放弃。搞了三天啥都没搞出来,和女朋友出去玩散散心,还是很高兴。 0x01 初显进展 测试范围内有六个门户

CanMeng'Blog - 一个WEB安全渗透的技术爱好者 3970

将Excel文件导入数据库(POI+Excel+MySQL)(jsp页面导入)

本文章是从浏览器端,选择Excel文件,上传到服务器,保存为一个excel 文件,然后将服务器上的Excel文件导入进数据库。

Lynn_Blog 4万+

Linux:在使用UEFI固件的计算机上内核是如何被启动的

启动计算机通常不是一件难事:按下电源键,稍等片刻,你就能看到一个登录界面,再输入正确的密码,就可以开启一天的网上冲浪之旅了。但偶尔这件事没那么顺利,有时候迎接你的不是熟悉的登录界面,而是一个令人生畏的命令提示符界面,一闪一闪的提示符告诉你:“你碰到麻烦了”。于是你对着错误提示查找解决方法,按照网页上的步骤,你对着提示符输入并执行了几条你完全不理解的命令,计算机又能正常启动了,但同时你发现你那存有大学舍友糗照的硬盘分区被清空了。

imred的专栏 3069

ssm的excel表格导出功能-基于poi方式

因前几天找的layui方式都不可兼容ie8,所以现在只能用poi方式来写了,话不多说,直接上代码。 先把poi包导进来,此贴提供maven方式,直接把这段代码复制到maven 的pom.xml中标签中即可。没使用maven的可以去下载然后导入就ok啦:http://poi.apache.org/download.html <!--excel解析poi包--> <depen...

zhi258wei的博客 2495

图像处理:张量分解在图像处理领域的应用

随着计算机视觉和图像处理技术的快速发展,图像数据呈现出高维、多模态、海量等特点。传统的矩阵分解方法已经无法有效处理这些复杂的图像数据。张量分解作为一种高阶矩阵分解方法,可以很好地捕捉图像数据的高维结构信息,在图像处理领域展现出巨大的应用前景。本节介绍几种常用的张量分解算法,包括高阶SVD(HOSVD)、Tucker-ALS、CP-ALS等。这些算法的核心思想是通过迭代优化的方式,交替更新张量分解的因子矩阵,直到收敛为止。综上所述,本文系统地介绍了张量分解技术在图像处理领域的应用。

AI天才研究院 7106

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

POI的Excel表格导出教程

一、jsp页面  1.导出按钮 button type="button" id="export">导出button> 2.搜索栏条件 div class="input-group pull-right"> div class="input-group"> select id="deptId" name="deptId" class="input-sm for

一个很酷的人 1116

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JSP生成EXCEL文件

生成Excel文件使用的是apache的开源项目poi,sun的jxl也还不错.     response.reset();    String filename = new String(("报表").getBytes(), "ISO-8859-1");    response.setContentType("APPLICATION/OCTET-STREAM");    respon

牧场_SZ_Shepherd... 1268

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java读写excel文件poi_JSP使用POI读写Excel文件

帅子 阅读(2538) 评论(1) 编辑 收藏 所属分类: J2EE技术专区步骤详解1、在Tomcat安装目录下的webapps目录下新建POI目录,在该目录中建立WEB-INF、并在WEB-INF中建立lib目录。2、从http://jakarta.apache.org/poi/下载POI组件包,将其解压缩到硬盘,找到其中的poi-2.5.1-final-20040804.jar拷贝到应...

weixin_30345333的博客 423

poi导入excel数据到数据库

导入poi依赖 <properties> <poi.version>3.17</poi.version> </properties> <!-- POI --> <dependency> <groupId>org.apache.poi</gr...

kxj19980524的博客 4447

转:java生成EXCEL表格(POI vs JXL)

java生成EXCEL表格(POI vs JXL) 文章分类:Java编程 java生成EXCEL表格(POI vs JXL) java生成excel表格,以前只知道POI,这是Apache的开源项目,本来是一套的,包括word,但是因为word的复杂性,以及开发人员的缺乏,好像基本停滞了。只有Excel做的还算比较完整,用起来比较轻松。 后来因为做项目的关系,知道了还有个JXL(java excel),也是个开源项目,用起来的感觉跟POI很类似,因为用到的功能都很简单,也没觉得有什么大的差距。网上

attilax的专栏 2641

SSM中利用POI导出数据库到excel表格

jsp: 导出数据js: function export_data(){ window.location.href="${ctx}/swipeRecord/reprotRecord"; } controller: /** * 导出数据 * * @param response * @return * @throws IOException */ @R

nvxiaq的博客 2515
上一篇: 在FORM的不同按钮实现不同的ACTION的方法
下一篇: ATGrid + JSP + Javascript + XML 开发Web控件打印
TopestCoder
博客等级 码龄19年 12粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值