使用poi需要用到的jar包

本文的导出基于execl的模板导出,在大部分表头固定而格式花样比较复杂的建议使用本文介绍的方法(表头固定,只需要填充值)

1、在webroot目录下新建report文件夹来存放模板execl文件

2、jsp前台请求对应的action代码

String path = request.getSession().getServletContext().getRealPath("/")+"report/goodslaunch.xls";
String id = request.getParameter("id");//需要导出的数据的某Id
String name = this.xxService.loadNameById(id);//查询出id对应的真实名称 ByteArrayOutputStream os = (ByteArrayOutputStream)this.xxxService.expExecl(id, path);
if(null!=os && os.size()>0){
byte[] buffer = os.toByteArray(); String fileName = "[" + name + "]XX模块." + path.substring(path.lastIndexOf(".")+1, path.length());
// 设置response的Header
response.setContentType("application/x-msdownload; charset=UTF-8");
response.addHeader("content-type", "application/x-msexcel");
response.addHeader("content-disposition", "attachment; filename="+ new String(fileName.getBytes("gb2312"), "iso8859-1")); //这里必须转码,或者会有问题
response.setContentLength(buffer.length); OutputStream out = response.getOutputStream();
out.write(buffer);
out.flush();
os.close();
}

3、service代码

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory; /**
* 导出生成execl
* @throws Exception
*/
public OutputStream expExecl(String id,String execlPath) throws Exception{
List<XxDto> data = this.getSearchResult(id); Workbook wb = WorkbookFactory.create(new File(execlPath)); Font font = wb.createFont();
font.setFontName("微软雅黑");
font.setFontHeightInPoints((short) 10); CellStyle style = wb.createCellStyle();
style.setBorderBottom((short)1);
style.setBorderLeft((short)1);
style.setBorderRight((short)1);
style.setBorderTop((short)1);
style.setFont(font); if(data.size()>0){
Sheet sheet = wb.getSheetAt(0);
int rownum = 1;
for(XxDto item : data){
Row row = sheet.createRow(rownum++);
int cellnum = 0;
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx());
row.createCell(cellnum++).setCellValue(item.getXxx()); //设置样式
for(int i=0; i<cellnum; i++){
row.getCell(i).setCellStyle(style);
}
}
}
OutputStream os = new ByteArrayOutputStream();
wb.write(os);
return os;
}

当没有模板时需要创建文件(2007和2007以前的execl的写法是不同的)

Workbook wb;
  Sheet sheet;

File file = new File(fileName);
//文件不存在
if(!file.exists()){
addFlag = false;
}
if(!addFlag){
if("xls".equals(fileSuffix)){
//老execl
wb = new HSSFWorkbook();
}else{
//新execl
wb = new XSSFWorkbook();
}
sheet = wb.createSheet("data");
createExeclHead(sheet);
}else{
//利用工厂读取execl可以不需要关心execl的版本问题
wb = WorkbookFactory.create(file);
sheet = wb.getSheetAt(0);
}

更详细的用法可以去官网看文档:http://poi.apache.org/

使用poi导出execl的更多相关文章

  1. POI导出Execl文件,使JAVA虚拟机OOM

    由于在项目中使用POI导出execl,导致JAVA虚拟机OOM,采用以下方式解决问题: 原先方式: g_wb = new XSSFWorkbook(sourceFile.getInputStream( ...

  2. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

  3. 重构:以Java POI 导出EXCEL为例2

    前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...

  4. poi 抽取execl表面数据源代码工具

    开发中 ,导入导出execl避免不了数据类型格式的校验,在使用poi要使用抽取表面数据,poi暂时不支持单元格抽取,查询poi源码抽取工具类如下,如使用jxl就不必使用,jxl取出的单元格数据已是抽取 ...

  5. poi导出excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  6. POI导出excel的简单demo

    目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...

  7. 当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误

    当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示. 有两种方法可以解决以上问题: 1.修改we ...

  8. asp.net中导出Execl的方法

    一.asp.net中导出Execl的方法: 在 asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址 输出在浏览器上:一种是将文件直接将文件输出流写给 ...

  9. [转载]poi导出excel,可以自定义保存路径

    poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...

随机推荐

  1. Unity3.x游戏开发经典教程 书例 100%完毕~

    大家都公布自己的作品,作为一个新人,我也发点什么.刚刚做完了Unity3.x游戏开发经典教程书例不久,假如有同学想学这本书入门U3D,我的作品也能让新人參考一下...脚本都是C#写的.以下附上链接~ ...

  2. RobotFramework自动化3-搜索案例

    前言 RF系列主要以案例为主,关键字不会的可以多按按F5,里面都有很详细的介绍,要是纯翻译的话,就没太大意义了,因为小编本来英语就很差哦! 前面selenium第八篇介绍过定位一组搜索结果,是拿百度搜 ...

  3. MySQL面试题集锦

    1. 如何设计一个高并发的系统 ① 数据库的优化,包括合理的事务隔离级别.SQL语句优化.索引的优化 ② 使用缓存,尽量减少数据库 IO ③ 分布式数据库.分布式缓存 ④ 服务器的负载均衡 2. 锁的 ...

  4. Tomcat6内存不足问题及解决方法

    1.Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行.常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常 ...

  5. iOS:UIToolBar控件的使用

    UIToolBar控件:是经常使用的一个工具条控件,虽然在上面可以添加子控件,但是toolbar中只能添加UIBarButtonItem类型的子控件,其他子控件会被包装成这种类型的,例如UIButto ...

  6. OBjective-C:在可变数组NSMutableArray中添加相同对象后,进行自定义的排序方式输出

    以下为自定义的排序方式的实现 #import "Person+Compare.h" @implementation Person (Compare) -(NSComparisonR ...

  7. 最小均方算法(LMS Algorithm)理论及DSP实现

    LMS算法可认为是机器学习里面最基本也比较有用的算法,神经网络中对参数的学习使用的就是LMS的思想,在通信信号处理领域LMS也非常常见,比如自适应滤波器. 本文主要对LMS(Least Mean Sq ...

  8. 关于编码问题,报错:'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte sequence

    之前经常在写入文件的时候遇到这种报错, 'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte seq ...

  9. Bootstrap学习js插件篇之提示框

    案例 受到Jason Frame开发的jQuery.tipsy插件的启发,我们才把这个工具提示插件做的更好,而且此插件不依赖图片,只是使用CSS3来实现动画效果,并使用data属性存储标题. 将鼠标悬 ...

  10. vue路由使用踩坑点:当动态路由再使用路由name去匹配跳转时总是跳转到根路由的问题

    闲话少说,直接问题: 之前我的路由时这么写的 { path:'/serverInfo/:id', name:'serverInfo', component:() => import('@/vie ...