`

poi ,Struts2 导出Excel运用(一)

 
阅读更多

最近忙于实现导出Excel功能,在boss的建议下,决定使用poi导出excel文件

在的我的应用中我导入的poi-<chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">2.5.1</chsdate>.jar 存放路径lib下即可。

PoiStruts2的联合使用 我觉的最重要的是Struts2的文件配置了

下面的导出方法:没有使用Excel模板

我的配置文件是:

<action name="pointDetailsToExcel" class="pointDetailsAction" method="listBillDetailsToExcel">

 

 

<!-- Result返回结果为InputSream对象,并处理下载文件的类型—->

 

 

<result name="success" type="stream">

 

 

<!-- contentType 指定下载文件的文件类型 —— application/vnd.ms-excel --->

 

 

<param name="contentType">application/vnd.ms-excel</param>

 

 

<!--返回流 excelStreamaction中的流变量名称 -->

 

 

<param name="inputName">excelStream</param>

 

 

<!-- attachment 这个位置的参数挺特殊的,可以设置成下载时,是否出现个下载提示框,或者直接下载之类的,怎么设置忘了,那个小本子找不到了 filename指定生成的文件名字(这种方式合适动态生成文件名,比如做报表时,一般都要说是几月的统计数据之类)action中变量

 

 

${downloadFileName} 可以处理中文问题 详见Blog http://www.360doc.com/content/09/1122/22/144699_9566346.shtml-->

 

 

 

 

 

<param name="contentDisposition">attachment;filename="${downloadFileName}"

 

 

</param>

 

 

<param name="bufferSize">1024</param>

 

 

</result>

 

 

<result name="error">/comm/error.jsp</result>

 

 

</action>

整个配置文件中最重要的两个变量就是 excelStreamdownloadFileName

 

 

inputName 流对象名 —— 比如这里写excelStream,它就会自动去找Action中的getInputStream方法。contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${ downloadFileName }",将调用该Action中的ge tDownloadFileName方法。

 

 

这两个变量一定要在action中有定义,否则会报错

 

我的jsp文件:

 

 

 

 

<a href="#" onClick="Redirect();">

 

 

<img src='<%=ctxPath%>/image/admin/btn_search.gif'/>导出Excel</a>

 

 

对应的js文件:

 

 

 

 

 

function Redirect(){

 

 

document.mainForm.action= "pointDetailsToExcel.do";

 

 

document.mainForm.submit();

 

 

}

 

 

 

 

对应的action.java文件:

 

 

private InputStream excelStream; //输入流变量

 

 

private String downloadFileName;

 

 

 

 

 

public InputStream getExcelStream() {

 

 

return excelStream;

 

 

}

 

 

 

 

 

public void setExcelStream(InputStream excelStream) {

 

 

this.excelStream = excelStream;

 

 

}

 

 

//处理下载时 文件名是中文的方法:

 

 

public String getDownloadFileName() {

 

 

SimpleDateFormat sf = new SimpleDateFormat( "yyyy-MM-dd ");

 

 

String downloadFileName= (sf.format(new Date()).toString())+"会员消费明细统计.xls";

 

 

try{

 

 

downloadFileName=new String(downloadFileName.getBytes(),"ISO8859-1");

 

 

}catch(UnsupportedEncodingException e){

 

 

e.printStackTrace();

 

 

}

 

 

return downloadFileName;

 

 

 

 

}

 

 

public void setDownloadFileName(String downloadFileName) {

 

 

this.downloadFileName = downloadFileName;

 

 

 

 

 

}

 

//action中的方法

 

 

public String listBillDetailsToExcel() throws Exception {

 

 

try{

 

 

page = new Page();

 

 

page.setPageSize(10000);

 

 

page.setStartIndex(0);

 

 

AccountDto accountDto = (AccountDto)session.get(Constants.USER_SESSION_KEY);

 

 

orgs = organizationService.getOrganizationTree(accountDto.getOrgCode());

 

 

if (orgId==0)

 

 

{

 

 

orgId=accountDto.getOrgId();

 

 

}

 

 

page = pointDetailsService.getPointDetailsPage(page, orgId,Begin,End);

 

 

list=page.getResult();//生成的list

 

 

excelStream=pointDetailsToExcelService.exportPointDetails(list);

 

 

return SUCCESS;

 

 

}catch (ServiceException e) {

 

 

e.printStackTrace();

 

 

return ERROR;

 

 

}

 

 

}

 

 

 

 

 

 

对应的Service实现类

package com.dbw.mps.service.impl;

 

 

 

 

 

 

 

 

import com.dbw.core.exception.ServiceException;

 

 

import com.dbw.core.service.impl.ServiceImpl;

 

 

 

 

 

import com.dbw.mps.dto.PointBillDto;

 

 

 

 

 

 

 

 

import java.io.File;

 

 

import java.io.FileInputStream;

 

 

import java.io.FileNotFoundException;

 

 

import java.io.FileOutputStream;

 

 

import java.io.IOException;

 

 

import java.io.InputStream;

 

 

import java.io.OutputStream;

 

 

import java.util.List;

 

 

 

 

 

import org.apache.commons.lang.RandomStringUtils;

 

 

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

 

 

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

 

 

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

 

 

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

 

 

import com.dbw.mps.service.IPointDetailsToExcelService;

 

 

 

 

public class PointDetailsToExcelServiceImpl extends ServiceImpl

 

implements IPointDetailsToExcelService {

 

 

 

 

 

 

public InputStream exportPointDetails(List list) throws ServiceException{

 

 

 

 

 

 

// 创建一个HSSFWorkbook

 

 

HSSFWorkbook wb = new HSSFWorkbook();

 

 

// HSSFWorkbook创建一个HSSFSheet

 

 

HSSFSheet sheet = wb.createSheet();

 

 

// HSSFSheet创建HSSFRow

 

 

HSSFRow row = sheet.createRow((short)0);

 

 

 

 

HSSFCell cell = row.createCell((short) 0);

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("消费日期");

 

cell = row.createCell((short) 1);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题2");

 

 

 

 

 

cell = row.createCell((short) 2);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题3");

 

 

 

 

 

cell = row.createCell((short) 3);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题4");

 

 

 

 

cell = row.createCell((short) 4);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题5");

 

cell = row.createCell((short) 5);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题6");

 

 

 

 

 

cell = row.createCell((short) 6);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题7");

 

 

 

 

cell = row.createCell((short) 7);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题8");

 

 

 

 

 

cell = row.createCell((short) 8);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题9");

 

 

 

 

 

cell = row.createCell((short) 9);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题10");

 

 

 

 

cell = row.createCell((short) 10);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题11");

 

 

 

 

 

cell = row.createCell((short) 11);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue("标题12");//上面是导出Excel的表头

///下面的是根据list 进行遍历循环 想下面的单元格 塞值(这篇笔记之前发表不了,后来发现是我的表头汉字 有敏感字,故改成标题)

 

 

 

 

 

 

for (int i = 1; i < list.size() + 1; i++) {

PointBillDto dto =(PointBillDto) list.get(i-1);;

 

 

row = sheet.getRow(i);

 

 

if(row == null)

 

 

row = sheet.createRow((short)i);

 

 

cell = row.getCell((short)0);

 

 

if(cell == null)

 

 

cell = row.createCell((short)0);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue(dto.getAddTime()== null?"":dto.getAddTime().toString());

 

 

cell = row.getCell((short)1);

 

 

if(cell == null)

 

 

cell = row.createCell((short)1);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((String)dto.getOperatorName());

 

 

cell = row.getCell((short)2);

 

 

if(cell == null)

 

 

cell = row.createCell((short)2);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((String)dto.getBillNo());

 

 

cell = row.getCell((short)3);

 

 

if(cell == null)

 

 

cell = row.createCell((short)3);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((String)dto.getCardNo());

 

 

cell = row.getCell((short)4);

 

 

if(cell == null)

 

 

cell = row.createCell((short)4);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((String)dto.getCustomerName());

 

 

cell = row.getCell((short)5);

 

 

if(cell == null)

 

 

cell = row.createCell((short)5);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((String)dto.getCarNo());

 

 

cell = row.getCell((short)6);

 

 

if(cell == null)

 

 

cell = row.createCell((short)6);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue(dto.getCashValue().toString());

 

 

cell = row.getCell((short)7);

 

 

if(cell == null)

 

 

cell = row.createCell((short)7);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((Integer)dto.getPointValue());

 

 

cell = row.getCell((short)8);

 

 

if(cell == null)

 

 

cell = row.createCell((short)8);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((Integer)dto.getGainedPoint());

 

 

cell = row.getCell((short)9);

 

 

if(cell == null)

 

 

cell = row.createCell((short)9);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue(dto.getTotalValue().toString());

 

 

cell = row.getCell((short)10);

 

 

if(cell == null)

 

 

cell = row.createCell((short)10);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((Integer)dto.getRemainPoint());

 

 

cell = row.getCell((short)11);

 

 

if(cell == null)

 

 

cell = row.createCell((short)11);

 

 

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

 

 

cell.setCellValue((Integer)dto.getAccumulatePoint());

 

 

}

 

 

 

//使用apachecommons-lang.jar产生随机的字符串作为文件名

String fileName=RandomStringUtils.randomAlphanumeric(10);

 

 

//生成xls文件名必须要是随机的,确保每个线程访问都产生不同的文件

 

 

StringBuffer sb=new StringBuffer(fileName);

 

 

final File file = new File(sb.append(".xls").toString());

 

 

try {

 

 

OutputStream os=new FileOutputStream(file);

 

 

try {

 

 

wb.write(os);

 

 

os.close();

 

 

} catch (IOException e) {

 

 

}

 

 

 

 

} catch (FileNotFoundException e) {

 

 

e.printStackTrace();

 

 

}

 

 

 

 

InputStream is=null;

 

 

try {

 

 

is=new FileInputStream(file);

 

 

} catch (FileNotFoundException e) {

 

 

e.printStackTrace();

 

 

}

 

 

 

 

return is;//返回的是一个输入流

 

 

}

 

 

}

 

 

 

分享到:
评论

相关推荐

    struts2 poi导出到excel

    接下来,我们创建一个Struts2的动作类(Action),在这个类中定义导出Excel的方法。这个方法通常会接收一些参数,如查询条件,然后根据这些条件从数据库或其他数据源获取数据。例如: ```java public class ...

    Java Struts2+poi插件 实现导出Excel

    这个项目"Java Struts2+poi插件 实现导出Excel"就是结合这两个工具,为用户提供一个功能,能够将数据导出到Excel格式的文件中。 首先,让我们详细了解一下Struts2。Struts2的核心是Action,它负责接收请求、处理...

    POI+struts2导出Excel

    标题中的“POI+struts2导出Excel”是指使用Apache POI库与Struts2框架结合,实现在Web应用程序中导出数据到Excel的功能。Apache POI是Java平台上的一个开源项目,它允许开发者创建、修改和显示Microsoft Office格式...

    使用poi从数据库导出excel表的示例

    总结起来,"使用poi从数据库导出excel表的示例"是一个结合了Struts1 MVC框架和Apache POI库的Java编程任务,它涉及数据库连接、SQL查询、Excel文件生成以及Web应用响应。这个过程不仅有助于数据的高效管理和分享,也...

    struts2中利用poi导出excel

    本篇文章将深入探讨如何在Struts2框架中使用POI库来导出Excel文件。 首先,我们需要在项目中引入Apache POI库。可以通过Maven或Gradle将其添加到构建文件中。对于Maven,可以在pom.xml文件中添加以下依赖: ```xml...

    struts2导出Excel poi

    在Struts2中,你可以创建一个Action类,该类包含一个导出Excel的方法,并将上述代码集成到其中。别忘了在Action中设置合适的Result类型,使得返回的内容被浏览器识别为Excel文件,通常可以设置Content-Type为...

    struts2+poi实现导出Excel文件

    Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...

    Struts2 poi动态导入导出Excel源码示例

    Struts2是一个流行的Java web开发框架,它提供了一种模型-视图-控制器(MVC)架构,使得开发者可以更方便地构建可维护、可扩展的Web应用。在本示例中,Struts2被用来处理HTTP请求和响应,协调前端视图与后端业务逻辑...

    struts2实现excel导出

    在Struts2框架中,实现Excel导出的功能主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。以下将详细介绍如何利用Struts2和POI实现Excel导出。 首先,你需要在项目中引入Apache POI库。...

    struts2+poi导出excel表格完整例子

    在这个“struts2+poi导出excel表格完整例子”中,我们将深入探讨这两个工具如何协同工作,实现从Web应用导出数据到Excel电子表格的功能。 首先,让我们了解一下Struts2的工作原理。Struts2基于拦截器(Interceptor...

    基于struts2 spring ibatis poi开发的导出Excel实例

    【基于Struts2 Spring iBatis POI开发的导出Excel实例详解】 在现代Web应用程序中,导出数据到Excel格式是一种常见的需求,这有助于用户分析、存储或共享信息。本实例将详细介绍如何利用Struts2、Spring和iBatis...

    struts2导出excel笔记

    通过以上步骤,我们可以实现一个简单的Struts2应用,该应用能够根据用户请求,使用Apache POI库动态生成并导出Excel文件。在实际项目中,可能还需要考虑数据过滤、排序、分页等功能,以及与数据库的交互,这些都可以...

    struts2导出excel.rar

    文件名暗示这是一个Struts2 Action类,用于处理导出Excel的请求。在Struts2中,Action类是业务逻辑的载体,处理HTTP请求,调用业务服务,准备数据,并返回一个Result指示视图如何展示。 6. **配置文件修改** 要使...

    struts,poi导出excel

    在 Java 开发中,如果你需要导出数据到 Excel,Apache POI 提供了高效的 API 来实现这一功能。在本文中,我们将深入探讨如何使用 POI 组件来创建和操作 Excel 文档。 1. **创建 Excel 文档对象** 创建一个 Excel ...

    POI + Struts2 实现Excel导出工具包

    4. **配置Struts2 Action**:创建一个Struts2 Action类,声明一个方法用于导出Excel,该方法的返回类型应配置为一个特定的Result类型,如stream或者excel,这会使得Struts2将结果流直接发送到浏览器。 5. **设置...

    Poi动态导入导出Excel基于Struts2 Hibernate Spring源码工程实例

    1.本动态导入导出Excel工程导入Eclipse即可用行,支持所有版本的Excel导入导出。...2.程序使用Struts2+POI+SQLSever(SSH即Struts2+Hibernate+Spring)实现Excel动态数据导入和导出,压缩包内含程序源码文件。

    struts2+poi实现excel表格导出

    - 创建Action:首先,我们需要在Struts2中创建一个Action类,该类包含一个方法,负责执行导出Excel的操作。 - 构建Excel:在Action的方法中,使用Apache POI创建HSSFWorkbook对象,代表Excel工作簿。接着,添加...

    struts2+poi 实现Excel导出

    4. **Struts2配置**:为了实现在Struts2中调用POI方法,需要在struts.xml配置文件中定义一个Action,指定对应的类和方法。此外,可能还需要配置拦截器,比如`result`类型,以处理导出的结果。 5. **依赖管理**:在...

    Struts1.2导出Excel表

    在这个“Struts1.2导出Excel表完美版”中,我们将深入探讨如何利用Struts1.2框架来实现这一功能。 首先,导出Excel表的核心技术是Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。在Struts1.2...

Global site tag (gtag.js) - Google Analytics