- 浏览: 248948 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
sweed0:
为何每一段代码都重复一次呢?
spring注解实例二 -
Gary_Huangpf:
- - 插件报错啊
Ext前台分页 -
ddvk2007:
版主 我想請問你所說的mapreduce是hadoop的還是g ...
MapReduce中的Shuffle和Sort分析 -
人可木:
好问章,楼主写的相当详细。。。多谢。。。
findbugs插件的安装与应用 -
hautbbs:
按照博主的方法启动调试出现jvm terminated.Ex ...
10分钟学会使用MyEclipse断点调试js
经过一天半的学习,终于采用poi方式从数据库中导出数据到execl并实现下载。具体代码如下:
package com.szwistar.metenoa.oaagent;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 weaver.conn.RecordSet;
import com.szwistar.common.ServerAgentBase;
import com.szwistar.common.util.util4RecordSet;
/**
*
* @function 根据Action传过来的requestId查询明细表里面的数据,并将数据写入到根据requestId生成的excel文件中,并把execl打开或者下载保存。
* @author huanglizhi
* @creatTime 2010-5-6
* @edit 2010-5-7
*
*/
public class OAAgent_test_Excel extends ServerAgentBase {
/**
* 得到requestId,调用createExcel方法生成Excel文件
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
request.setCharacterEncoding("gbk");
try {
//获得requestid
String requestId = "";
try {
//得到requestId并对requestId进行处理
requestId = request.getParameter("requestId");
log.info("requestId xxx : " + requestId);
if(null == requestId || "".equals(requestId)) {
log.debug("requestId(null or blank): " + requestId);
requestId = "";
}
} catch(Exception e) {
requestId = "";
log.error("requestId(exception): " + requestId);
}
//根据requestId生成EXCEL文件
createExcel(requestId, request, response);
} catch (Exception e) {
log.error("OAAgent_test_Excel doget failed! " + e.getMessage());
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
this.doGet(request, response);
}
/**
* 从明细表里查询出EXCEL需要的信息
* @param requestId
* @return excelList
*/
@SuppressWarnings("unchecked")
protected static ArrayList getExcelList(String requestId) {
RecordSet res = null;
ArrayList excelList = null;
try {
//从明细表formtable_main_28_dt1里取出需要的字段来
String sql = "select id,mainId,mx01,mx02,mx03,mx04 from formtable_main_28_dt1 where mainid in (select id from formtable_main_28 where requestId = " + requestId + ")";
log.info("从明细表里查询出EXCEL需要的信息: " + sql);
res = new RecordSet();
res.executeSql(sql);
//RecordSetToListObj方法返回的ArrayList为ArrayList<AList>结构
//其中AList又为 ArrayList<String>结构;第一个list为字段名 ,后续list为字段值
excelList = util4RecordSet.RecordSetToListObj(res, null);
} catch (Exception e) {
log.error("从明细表里查询出EXCEL需要的信息: " + e.getMessage());
}
log.info("excelList:" + excelList);
return excelList;
}
/**
* 创建EXCEL文件
* @param requestId
*/
@SuppressWarnings("unchecked")
protected void createExcel(String requestId, HttpServletRequest request, HttpServletResponse response) {
log.info("enter createExcel......");
FileOutputStream fout = null;
try {
fout = new FileOutputStream(new File("/opt/weaver50/ecology/excelFile/中文.xls"));
} catch (FileNotFoundException e1) {
log.error(e1.getMessage() + ":" + fout);
}
//创建工作簿
HSSFWorkbook hsshworkbook = new HSSFWorkbook();
//由工作簿创建工作表,注意的一点是下标从0开始,就像数组一样
HSSFSheet hsshsheet = hsshworkbook.createSheet();
//设置工作表的名称,该方法需要三个参数,第一个是工作表在工作薄中的位置,第二个就是工作表的名称,第三个是字符编码
hsshworkbook.setSheetName(0,"实验项目列表--中文测试",HSSFWorkbook.ENCODING_UTF_16);
//对应excel的行
HSSFRow hssfrow = hsshsheet.createRow(0);
//创建单元格,设置每个单元格的值(作为表头),对应excel的列
//很多方法的参数是short而不是int,所以需要做一次类型转换
HSSFCell hssfcell = hssfrow.createCell((short) 0);
//字符编码,必须加上,否则中文乱码
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
//设定单元格的值,值的类型有:double,int,String,Date,boolean
hssfcell.setCellValue("编号");
hssfcell = hssfrow.createCell((short) 1);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hssfcell.setCellValue("报销人");
hssfcell = hssfrow.createCell((short) 2);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hssfcell.setCellValue("报销事项");
hssfcell = hssfrow.createCell((short) 3);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hssfcell.setCellValue("报销金额");
hssfcell = hssfrow.createCell((short) 4);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hssfcell.setCellValue("报销日期");
hssfcell = hssfrow.createCell((short) 5);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hssfcell.setCellValue("备注");
//处理后的EXCEL内容结果集
ArrayList excelList = new ArrayList();
try {
log.info("before getExcelList");
// 获得处理后的EXCEL内容结果集,excelList存放的是一条条完整的记录
excelList = getExcelList(requestId);
log.info("excelList:" + excelList);
// arrayList存放的是每一条记录的所有列
ArrayList arrayList = null;
//如果excelList没有记录 则返回
if(excelList.size() < 1) {
log.info("没有查询到记录....");
return;
}
if(null != excelList) {
//得到结果集的记录条数
int count = excelList.size();
log.info("count:" + count);
//excelList得到的是含有表头的数据集,i=1表示除去表头后的第一条记录
for(int i = 1; i < count; i++) {
log.info("enter for");
arrayList = (ArrayList) excelList.get(i);
log.info("after arrayList");
hssfrow = hsshsheet.createRow(i);
log.info("after hssfrow");
for (int j = 0; j < arrayList.size(); j++) {
hssfcell = hssfrow.createCell((short) j);
hssfcell.setEncoding(HSSFCell.ENCODING_UTF_16);
//将每一列的值插入到单元格中
hssfcell.setCellValue(arrayList.get(j).toString());
}
}
}
//将工作簿对象hsshworkbook写入到输出流
hsshworkbook.write(fout);
fout.flush();
fout.close();
log.info("EXCEL文件已生成......");
} catch (IOException e) {
log.error("createExcel error:" + e.getMessage());
return;
}
log.info("before DownExcelFile");
//下载已生成的execl文件
DownExcelFile(response);
log.info("EXCEL文件下载完成......");
}
/**
* 下载execl文件
*/
public void DownExcelFile(HttpServletResponse response) {
String fileDownPath = "/opt/weaver50/ecology/excelFile/中文.xls";
File file = new File(fileDownPath);
if (file.exists()) {
try {
log.info("enter try");
// 要用servlet 来打开一个 EXCEL 文档,需要将 response 对象中 header 的 contentType 设置成"application/x-msexcel"。
response.setContentType("application/x-msexcel");
String fileName = fileDownPath;
// 保存文件名称
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
// 处理中文文件名
fileName = new String(fileName.getBytes("GB2312"), "ISO-8859-1");
//servlet中,要在 header中设置下载方式
response.setHeader("Content-Disposition","attachment; filename=" + fileName);
//FileInputStream输入流
//FileInputStream bis = new FileInputStream(file);
//缓冲流(BufferedStream)可以一次读写一批数据,,缓冲流(Buffered Stream)大大提高了I/O的性能。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//OutputStream输出流
OutputStream bos = response.getOutputStream();
byte[] buff = new byte[1024];
int readCount = 0;
//每次从文件流中读1024个字节到缓冲里。
readCount = bis.read(buff);
while (readCount != -1) {
//把缓冲里的数据写入浏览器
bos.write(buff, 0, readCount);
readCount = bis.read(buff);
}
if (bis != null) {
bis.close();
}
if (bos != null) {
bos.close();
}
// 下载完毕,给浏览器发给完毕的头
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();
} catch (Exception e) {
log.error("DownExcelFile error:" + e.getMessage());
}
}
}
}
发表评论
-
解析网页利器组合(正则、jsoup、beanshell、dozer)资源
2012-05-31 16:09 1465由于项目需要使用java正则、jsoup、dozer、bean ... -
Java正则表达式(二)
2012-05-31 15:47 867Matcher类: 使用Matcher类,最重要的 ... -
Java正则表达式(一)
2012-05-31 15:46 858正则表达式在处理文本方面用处非常大,最早像在Perl和awk语 ... -
Java正则表达式详解
2012-05-31 15:45 848如果你曾经用过Perl或 ... -
理解String与String.intern()
2012-01-05 15:44 8421. 首先String不 ... -
StringUtils工具类的常用方法
2011-11-25 15:24 947StringUtils 方法的操作对象是 java.lan ... -
主题:深入分析 Java 中的中文编码问题
2011-11-11 09:06 1010几种常见的编码格式 ... -
Java中的乱码问题
2011-09-01 09:35 1103Java中乱码问题很常见,原因也多种多样,这里做一个总结, ... -
java反射机制详解 及 Method.invoke解释
2011-08-26 11:40 1681JAVA反射机制是在运行状态中,对于任意一个类,都能够 ... -
java编程中'为了性能'一些尽量做到的地方
2011-08-25 11:42 875最近的机器内存又爆满了,出了新增机器内存外,还应该好好re ... -
利用java反射原理写了一个简单赋值和取值通用类
2011-08-22 09:50 2460由于项目的实际需要,所以利用java反射原理写了一个简单给be ... -
Java实现给图片添加水印
2011-08-22 09:41 2100周末在家上围脖,看到sina围脖上图片都有水印,想到Jav ... -
java获取当前类的绝对路径
2011-08-03 10:41 1191在jsp和class文件中调用的相对路径不同。在jsp里, ... -
深入浅出URL编码
2011-08-03 10:30 803深入浅出URL编码 版权声明:如有转载请求,请注明出 ... -
URLConnection的连接、超时、关闭用法总结
2011-08-03 10:25 1352Java中可以使用HttpURLConnection来 ... -
Apache Rewrite实现URL的跳转和域名跳转
2011-07-28 11:31 1100Rewirte主要的功能就是实现URL的跳转,它的正则表达式是 ... -
文件、流总结
2011-07-27 09:31 14051、File类:File类位于java ... -
java对cookie的操作(转)
2011-07-18 15:56 989java对cookie的操作比较简单,主要介绍下建立coo ... -
java泛型
2011-07-18 15:42 832在Java SE1.5中,增加了一个新的特性:泛型(日本语 ... -
j2ee学习笔记——初试ssh之泛型通用dao(转)
2011-07-18 15:39 916在做项目的时候每次都为每个POJO实体写一个对应的DAO很 ...
相关推荐
Servlet方法是将数据导出到Excel的一种服务器端技术,常用于Web应用程序。它允许用户请求一个URL,然后服务器生成Excel文件并将其作为HTTP响应的一部分返回。在实现中,Servlet会创建一个Workbook对象,添加Sheet,...
总结来说,Java通过Apache POI库提供了强大的Excel操作能力,使开发者可以方便地将数据导出到Excel文件中。理解并掌握这一技能对于任何进行Java开发的人来说都是十分有用的。通过实践和不断探索,你可以创建更复杂的...
标题中的“POI实现的基于动态模板的EXCEL数据导出”是指利用Apache POI库来创建一个可以动态填充数据的Excel模板,从而实现大量数据的高效导出。Apache POI是一个开源项目,它允许Java开发者读写Microsoft Office...
在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...
POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...
在Java开发中,处理Excel数据是一项常见的任务,尤其是在数据分析、报表生成或批量数据操作的...开发者可以根据提供的测试数据和说明,轻松地将这个功能集成到自己的项目中,从而提升Excel处理部分的效率和用户体验。
描述中提到了本文的主要内容,即使用Java POI将图片导出到Excel中,并提供了详细的示例代码,对大家的学习或者工作具有一定的参考学习价值。 标签解释 标签中提到了Java POI、Excel、Java等关键词,表明了本文的...
大量数据导出时,一次性加载到内存可能导致内存溢出。为解决这个问题,可以采用流式处理(Streaming User Model)或分批处理。例如,使用SXSSF(Streaming Usermodel API)可以避免一次性加载所有数据,它会在磁盘...
"使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...
### Java POI 大量数据导出到Excel详解 #### 一、背景介绍 在日常工作中,经常需要处理大量的数据并将其导出为Excel文件,特别是在金融、电商等行业。Java POI库作为一款强大的用于读写Microsoft Office文档的Java ...
在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java POI Java POI 是一个开源的 Java 库,由 Apache 软件基金会维护。它提供了一系列的 API,用于处理 Microsoft Office 文件...
使用POI筛选字段导出Excel,以及条件查询和指定数据导出
本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI库能够实现这一功能,即可以通过Java程序操作Excel文件,包括读取、...
7. ExcelExportUtil:ExcelExportUtil 是一个工具类,用于将数据导出到 Excel 文件中。 8. HSSFWorkbook:HSSFWorkbook 是一个 POI 库中的类,用于操作 Excel 文件。 详细解释 在这个例子中,我们可以看到如何使用 ...
POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm
在这个场景中,"poi导出数据到excel里"指的是使用Apache POI库在Java项目中将数据写入Excel文件的过程。这个功能在数据分析、报表生成或者数据导出等场景中非常常见。以下是对Apache POI导出数据到Excel的详细解释:...
七、导出Excel文件 最后,将Workbook写入OutputStream或File,完成导出: ```java try (FileOutputStream out = new FileOutputStream("output.xlsx")) { workbook.write(out); } catch (IOException e) { e....
本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起打包成压缩包。 首先,让我们了解一下Apache POI。POI是Java开发者的开源API,它允许程序创建、修改和显示...