- 浏览: 240495 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1416由于项目需要使用java正则、jsoup、dozer、bean ... -
Java正则表达式(二)
2012-05-31 15:47 822Matcher类: 使用Matcher类,最重要的 ... -
Java正则表达式(一)
2012-05-31 15:46 804正则表达式在处理文本方面用处非常大,最早像在Perl和awk语 ... -
Java正则表达式详解
2012-05-31 15:45 797如果你曾经用过Perl或 ... -
理解String与String.intern()
2012-01-05 15:44 7981. 首先String不 ... -
StringUtils工具类的常用方法
2011-11-25 15:24 897StringUtils 方法的操作对象是 java.lan ... -
主题:深入分析 Java 中的中文编码问题
2011-11-11 09:06 953几种常见的编码格式 ... -
Java中的乱码问题
2011-09-01 09:35 1060Java中乱码问题很常见,原因也多种多样,这里做一个总结, ... -
java反射机制详解 及 Method.invoke解释
2011-08-26 11:40 1631JAVA反射机制是在运行状态中,对于任意一个类,都能够 ... -
java编程中'为了性能'一些尽量做到的地方
2011-08-25 11:42 833最近的机器内存又爆满了,出了新增机器内存外,还应该好好re ... -
利用java反射原理写了一个简单赋值和取值通用类
2011-08-22 09:50 2409由于项目的实际需要,所以利用java反射原理写了一个简单给be ... -
Java实现给图片添加水印
2011-08-22 09:41 2053周末在家上围脖,看到sina围脖上图片都有水印,想到Jav ... -
java获取当前类的绝对路径
2011-08-03 10:41 1151在jsp和class文件中调用的相对路径不同。在jsp里, ... -
深入浅出URL编码
2011-08-03 10:30 751深入浅出URL编码 版权声明:如有转载请求,请注明出 ... -
URLConnection的连接、超时、关闭用法总结
2011-08-03 10:25 1273Java中可以使用HttpURLConnection来 ... -
Apache Rewrite实现URL的跳转和域名跳转
2011-07-28 11:31 1055Rewirte主要的功能就是实现URL的跳转,它的正则表达式是 ... -
文件、流总结
2011-07-27 09:31 13701、File类:File类位于java ... -
java对cookie的操作(转)
2011-07-18 15:56 953java对cookie的操作比较简单,主要介绍下建立coo ... -
java泛型
2011-07-18 15:42 794在Java SE1.5中,增加了一个新的特性:泛型(日本语 ... -
j2ee学习笔记——初试ssh之泛型通用dao(转)
2011-07-18 15:39 876在做项目的时候每次都为每个POJO实体写一个对应的DAO很 ...
相关推荐
SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成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 poi导出大量数据到Excel
java版本的使用POI导出大数据量到EXCEL
使用POI筛选字段导出Excel,以及条件查询和指定数据导出
POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm
利用struts2和poi把数据导出到excel
该文件中包含了所有java项目中针对excel导入导出所需的jar包集合。 -------------------------------------- 将该zip解压后,将jar...应用场景:如 excel格式对账单导出,将数据库数据导出到excel中(带样式字体等)。
解决poi大数据量导出excel的代码,该代码中所用的jar包是poi3.9。在测试过程中单个sheet中导出20万数据没有问题。
JAVA实现数据库数据导入导出到Excel(POI)所需jar包
一个POI导出Excel万级数据分页实现 解决内存溢出问题 完整的 project demo 有数据库dmp文件
poi excel通过模板导出excel表格 且带有公式 导出的excel表格里面的公式均可计算 有简单的公式也有难的公司 在此例子里面都可以跟着excel一起到处并可计算
JAVA开发中需要将表格中数据导出成EXCEL文件,其中的某一项又要设置为HTML格式,并支持点击链接,使用POI的开源方式导出时可以参考到此文件的内容!
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
Poi导出Excel工具类 支持大数据量 多sheet页方式 已经封装好,直接拿来调用里面的方法传入参数就行 很简单
java实现excel的导入导出(poi详解),经过测试poi效率要比jxl要高很多,特别是数据量大的时候jxl根本无法用肉眼入目,本资源是个可运行项目demo,很有参考价值!
已在项目中使用,poi技术导出数据到excel里,绝对是你想要的。
利用POI实现Excel的导入和导出实例的实现,外加poi的全部jar包
java编程数据导出到Excel包poi-3.7
POI操作Excel,将数据导出到Excel表格中去