利用 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

AD2S1210与DSP28335 SPI通信中的GPIO配置陷阱与解决

本文深入剖析了AD2S1210与DSP28335进行SPI通信时,因GPIO输入限定配置不当导致数据整体右移的典型问题。文章指出,错误地将MISO引脚配置为带采样周期的同步模式是根本原因,并提供了将输入选择限制正确设置为异步模式的解决方案。同时,总结了不同应用场景下GPIO输入限定的配置原则,为高速同步通信的稳定实现提供了关键指导。

weixin_29163857的博客 147

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

从零开始:MTK ISP调试中的ImagiqSimulator实战指南

本文详细介绍了MTK ISP调试中ImagiqSimulator的实战应用,从环境准备、参数加载到核心模块调整,提供全面的调试流程指南。重点讲解了DM模块参数优化技巧和常见问题解决方案,帮助工程师高效完成ISP调试工作,提升图像处理质量。

weixin_29168813的博客 492

xHCI驱动学习(1) 核心数据结构

虽然Linux内核拥有C语言构建的身体,但它骨子里散发的是面向对象的气质,这一个个的对象就是struct。面对一个内核模块的时候,首先要找出关键的struct和它们之间的关系,才能摸清代码的骨骼脉络。今天来理清USB xHCI相关的数据结构类型usb_hcd、xhci_hcd、hc_driver和全局变量xhci_pci_driver、xhci_hc_driver、xhci_pci_hc_driver之间的关系。

1万+

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

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

不随黄叶舞秋风 1万+

Pixel 6 Pro升级Android 13变砖急救指南:Fastboot全分区修复实战

本文提供Pixel 6 Pro升级Android 13变砖后的Fastboot全分区修复实战指南,详细解析变砖原因、必备工具准备、Fastboot模式解锁、全分区擦除操作及手动刷入官方ROM的完整流程,帮助用户高效解决设备变砖问题。

weixin_28693447的博客 485

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

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

chenfeiguo的博客 6797

Linux安装Oracle sqlplus客户端工具

Linux安装Oracle sqlplus客户端工具

优快云_Nan_Jiang_Li的博客 2777

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理

本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。

weixin_29204205的博客 481

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

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

Lynn_Blog 4万+

解锁RK平台黑科技:DPDK加速与硬件卸载实战

本文探讨了在RK平台上通过DPDK加速与硬件卸载技术构建高性能网络架构的方法。RK平台凭借强大的硬件性能为高并发网络处理提供基础,而DPDK通过用户态驱动、轮询机制等技术绕过内核瓶颈,显著提升数据包处理效率。硬件卸载则将校验和计算等任务交由专用硬件,释放CPU资源。实践案例显示,该方案可使网络吞吐量提升至理论极限,延迟降至5ms以下,CPU利用率降低40%。文章详细介绍了配置步骤、优化方法和常见问题解决方案,并展望了该技术在5G、车联网等新兴领域的应用前景。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1283

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

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

zhi258wei的博客 2495

Python 爬虫实战:豆瓣 / IMDB 电影数据抓取(评分 + 剧情 + 演员阵容结构化处理)

在数据为王的时代,电影数据是进行市场分析、推荐系统构建和学术研究的重要资源。豆瓣和 IMDB 作为国内外最具影响力的电影评分和资讯网站,包含了海量高质量的电影数据。本文将带领你从零开始,构建一个健壮的 Python 爬虫,用于抓取豆瓣和 IMDB 的电影信息,并将其中的非结构化数据(如剧情简介、演员列表)进行清洗和结构化处理,最终存储到便于分析的结构化文件(如 CSV)中。

yansideyucsdn的博客 956

IEM模型,地表粗糙度模拟

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

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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、付费专栏及课程。

余额充值