怎样利用poi导出多个excel文件execl文件

2016年1月 其他数据库开发大版内专家分月排行榜第二2014年12月 其他数据库开发大版内专家分月排行榜第二2014年11月 其他数据库开发大版内专家分月排行榜第二2014年5月 其他数据库开发大版内专家分月排行榜第二
2014年3月 其他数据库开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。java 导出Excel 使用apache POI.jar 包
- 今天最成功 - ITeye技术网站
博客分类:
使用Java Annotation写Excel 工具类
package com.excel.export.
import java.lang.annotation.ElementT
import java.lang.annotation.R
import java.lang.annotation.RetentionP
import java.lang.annotation.T
* &p&导出excel 工具包&/p&
* @author liuqing
* @version 1.0
* @see 导出excel 注解
@Retention(value=RetentionPolicy.RUNTIME)
@Target(value=ElementType.FIELD)
public @interface AllowExcel {
boolean value()
String name();
package com.excel.export.
import java.io.S
import java.util.D
* @author liuqing
* @version 1.0
* @datetime
* @see 学生测试对象
public class Student implements Serializable {
private static final long serialVersionUID = -9874289L;
@AllowExcel(name="编号")
@AllowExcel(name="姓名")
@AllowExcel(name="生日")
public Integer getId() {
public void setId(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
public Date getDate() {
public void setDate(Date date) {
this.date =
POI 实现类
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.io.IOE
import java.io.InputS
import java.io.OutputS
import java.io.S
import java.lang.reflect.F
import java.util.ArrayL
import java.util.C
import java.util.D
import java.util.L
import org.apache.poi.hssf.usermodel.HSSFW
import org.apache.poi.ss.usermodel.C
import org.apache.poi.ss.usermodel.R
import org.apache.poi.ss.usermodel.S
import org.apache.poi.ss.usermodel.W
* @author LiuQing
* @see excel 导出工具类
* 使用方法
* class EntityObjectClass {
@AllowExcel(name="姓名")
@AllowExcel(name="生日")
private Date birthday
* ExportExcel&EntityObjectClass& export = new ExportExcel&EntityObjectClass&();
* List&EntityObjectClass& data = new ArrayList&EntityObjectClass&();
* InputStream inputStream = export.createExcel(data);
* @version 1.0
* @datetime
public class ExportExcel&T extends Serializable& {
* 定义Excel hander
private Workbook excelHander = new HSSFWorkbook();
* 生成sheet 名称
private String sheetName = "sName";
private boolean showHeader =
private Collection&T& tempData = new ArrayList&T&();
private boolean isFirst =
* 缓存成员变量
private List&String& fieldNameCaches = new ArrayList&String&();
* @see 生成Excel 文件
* @param data
* @throws IllegalAccessException
public InputStream createExcel(Collection&T& data) throws Exception {
this.tempData =
this.createHeader(data);
return this.getInputStream();
public void addDate(T t) throws Exception {
this.tempData.add(t);
* @throws Exception
public InputStream createExcel() throws Exception {
this.createHeader(this.tempData);
return this.getInputStream();
* @param data
* @throws IllegalAccessException
private void createHeader(Collection&T& data) throws Exception {
//Sheet 创建工作表
Sheet sheet = excelHander.createSheet(sheetName);
int j = 0;
for (T t:data) {
Field[] fields = t.getClass().getDeclaredFields();
* 加入允许字段缓存数据
* if == 0时表示要添加缓存数据
if (j == 0) {
Row headRow =
if (this.showHeader) {
headRow = sheet.createRow(0);
int i = 0;
for (Field field:fields) {
//判断Excel 安全允许注解
AllowExcel allowExcel = field.getAnnotation(AllowExcel.class);
if (allowExcel != null && allowExcel.value()) {
//显示关部信息
if (this.showHeader) {
Cell cell = headRow.createCell(i);
cell.setCellValue(allowExcel.name());
this.fieldNameCaches.add(field.getName());
//创建产生行数据
Row hssfRow = sheet.createRow(j);
this.setCellValueToRow(t, hssfRow);
* 输出Excel Row 信息
* @param t T extends Serializable
* @param hssfRow HSSFRow
* @return HSSFRow
* @throws IllegalAccessException
* @throws NoSuchMethodException
* @throws SecurityException
public Row setCellValueToRow(T t,Row hssfRow) throws Exception {
Class clazz = t.getClass();
Field fields[] = clazz.getDeclaredFields();
//定义Excel 输出行数
int i = 0;
for (Field field:fields) {
//缓存中是否存在允许字段
if (this.isCacheFiledName(field.getName())) {
Cell cell = hssfRow.createCell(i);
field.setAccessible(true);
Class clazzType = field.getType();
String methodName = "";
if (clazzType.getName().equals("boolean") ||
clazzType.getName().equals("java.lang.Boolean")) {
methodName = "is" + this.toFirstToUp(field.getName());
methodName = "get" + this.toFirstToUp(field.getName());
Object obj = clazz.getMethod(methodName, null).invoke(t, null);
//Object obj = clazz.getDeclaredMethod(methodName, null).invoke(t, null);
//类型转换
if (obj instanceof Integer ) {
cell.setCellValue((Integer)obj);
else if (obj instanceof String) {
cell.setCellValue((String)obj);
else if (obj instanceof Date) {
cell.setCellValue((Date)obj);
else if (obj instanceof Double) {
cell.setCellValue((Double)obj);
else if (obj instanceof Boolean) {
cell.setCellValue((Boolean)obj);
else if (obj instanceof Float) {
cell.setCellValue((Float)obj);
else if (obj instanceof Long) {
cell.setCellValue((Long)obj);
System.out.println(obj);
//throw new TypeNotPresentException("类型不支持", null);
return hssfR
* 判断Cache 是否有对应的FiledName
* @param fieldName String
* @return boolean
private boolean isCacheFiledName(String fieldName) {
if (fieldName == null) {
for (String fieldNameCache:this.fieldNameCaches) {
if (fieldName.equals(fieldNameCache)) {
* 获得输入流
* @return InputStream
private InputStream getInputStream() {
ByteArrayOutputStream output = new ByteArrayOutputStream();
InputStream inputStream =
this.excelHander.write(output);
byte b[] = output.toByteArray();
inputStream = new ByteArrayInputStream(b);
catch (IOException e) {
e.printStackTrace();
output.flush();
output.close();
catch (IOException e) {
e.printStackTrace();
return inputS
* 查找对应的类自定义方法
* @param methodName
* @return boolean
public boolean isClassMethodName(String methodName) {
if (methodName != null) {
if ("getClass".equals(methodName)) {
if (methodName.startsWith("get")
|| methodName.startsWith("is")
|| methodName.startsWith("set")) {
* @param str
* @return String
public static String toFirstToLower(String str) {
char chars[] = str.toCharArray();
if (chars != null && chars.length & 0) {
if (chars[0] & 'A') {
chars[0] = (char) (chars[0] + 32);
return new String(chars);
* 首字母转为大写
* @param str String
* @return String
public static String toFirstToUp(String str) {
char chars[] = str.toCharArray();
if (chars != null && chars.length & 0) {
if (chars[0] &= 'a') {
chars[0] = (char) (chars[0] - 32);
return new String(chars);
下载次数: 333
下载次数: 43
mianhuaman
浏览: 435741 次
来自: 重庆
u 写道您的代码确实能生成条形码,但是打印出 ...
学习了,很好~~
如果 ajax(jquery)更新了 iframe 的 src ...
感谢楼主,除了一维条码,有没有相关二维码的资源呢?______ ...
.....如果路径是中文肿么解决啊?用jXLS和poi导出Excel -
- ITeye技术网站
博客分类:
apache的poi提供了支持MS Office文档操作的java API。jXLS则是基于poi提供了支持Excel模版操作的API。
jXLS的主页是:http://jxls.sourceforge.net,似乎国内不能访问,需要代理。
下面是一些例子,以及我对导出到多个sheet的一个封装。
先定义一个模版:
这里的jxls tag和JSP的tag很像,varStatus是本次循环变量。
jxls提供了一个最简单的接口:
void net.sf.jxls.transformer..transformXLS( srcFilePath,
beanParams,
destFilePath) throws , ,
String srcFilePath = "E:\\tmp\\template-simple.xlsx";
Map&String, Object& beanParams = new HashMap&String, Object&();
List&VM& vms = new ArrayList&VM&();
VM vm = new VM();
vm.setName("我的CENTOS");
vm.setPrice(103);
vm.setScale("2CPU, 2G MEM, 2T DISK");
vm.setCreated(new Date());
vms.add(vm);
VM vm2 = new VM();
vm2.setName("my-ubuntu");
vm2.setPrice(200);
vm2.setScale("1CPU, 3G MEM, 1T DISK");
vm2.setCreated(new Date());
vms.add(vm2);
beanParams.put("vms", vms);
String destFilePath = "E:\\tmp\\simple.xlsx";
XLSTransformer transformer = new XLSTransformer();
transformer.transformXLS(srcFilePath, beanParams, destFilePath);
执行结果:
jXLS提供了很多方法,支持很复杂的表格生成。
但如果要指定在一个sheet最大行数,不是很方便,我包装了一个util方法:
package org.jamee.demo.
import java.io.FileInputS
import java.io.FileOutputS
import java.io.InputS
import java.io.OutputS
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import net.sf.jxls.transformer.XLST
import org.apache.poi.ss.usermodel.W
public class ExcelUtil {
private static final String DEFAULT_SHEET_NAME = "sheet";
* 导出无动态表头的Excel文件
* 参考重载的有动态表头注释
* @param destOutputStream
* @param templateInputStream
* @param data
* @param dataKey
* @param maxRowPerSheet
* @throws Exception
@SuppressWarnings("rawtypes")
public static void generateExcelByTemplate(OutputStream destOutputStream,
InputStream templateInputStream,
List data, String dataKey,
int maxRowPerSheet) throws Exception {
generateExcelByTemplate(destOutputStream,
templateInputStream,
null, null,
data, dataKey,
maxRowPerSheet);
* 通过Excel模版生成Excel文件
* 创建Excel模版,变量类似JSP tag风格。
* &li&无动态表头
* &jx:forEach items="${vms}" var="vm"&
* ${vm.id} ${vm.name} ${vm.scale} ${vm.created} ${vm.price}
* &/jx:forEach&
* &li&有动态表头
* 项目/数量/时间
&jx:forEach items="${dates}" var="date"&
${date} &/jx:forEach&
* &jx:forEach items="${itemsx}" var="item"&
* ${item.name}
&jx:forEach items="${item.counts}" var="count"& ${count}
&/jx:forEach&
* &/jx:forEach&
* 调用该方法则生成对应的Excel文件。
* 注意:dataKey不能是items, items是保留字,如果用items则会提示:Collection is null并抛出NullPointerException
* @param destOutputStream Excel输出流
* @param templateInputStream Excel模版输入流
* @param header 动态表头
* @param headerKey 表头的变量
* @param data 数据项
* @param dataKey 数据项变量
* @param maxRowPerSheet 每个sheet最多行数
* @throws Exception
@SuppressWarnings("rawtypes")
public static void generateExcelByTemplate(OutputStream destOutputStream,
InputStream templateInputStream,
List header, String headerKey,
List data, String dataKey,
int maxRowPerSheet) throws Exception {
List&List& splitData =
@SuppressWarnings("unchecked")
Map&String, List& beanMap = new HashMap();
List&String& sheetNames = new ArrayList&String&();
if (data.size() & maxRowPerSheet) {
splitData = splitList(data, maxRowPerSheet);
sheetNames = new ArrayList&String&(splitData.size());
for (int i = 0; i & splitData.size(); ++i) {
sheetNames.add(DEFAULT_SHEET_NAME
splitData = new ArrayList&List&();
sheetNames.add(DEFAULT_SHEET_NAME + 0);
splitData.add(data);
if (null != header) {
beanMap.put(headerKey, header);
XLSTransformer transformer = new XLSTransformer();
Workbook workbook = transformer.transformMultipleSheetsList(
templateInputStream, splitData, sheetNames, dataKey, beanMap, 0);
workbook.write(destOutputStream);
* 导出无动态表头的Excel文件,目标文件和模版文件均为文件路径
* 参考重载的有动态表头注释
* @param destFilePath
* @param templateFilePath
* @param data
* @param dataKey
* @param maxRowPerSheet
* @throws Exception
@SuppressWarnings("rawtypes")
public static void generateExcelByTemplate(String destFilePath,
String templateFilePath,
List data, String dataKey, int maxRowPerSheet) throws Exception {
generateExcelByTemplate(destFilePath, templateFilePath, null, null, data, dataKey, maxRowPerSheet);
* 导出有动态表头的Excel文件,目标文件和模版文件均为文件路径
* 参考重载的有动态表头注释
* @param destFilePath
* @param templateFilePath
* @param header
* @param headerKey
* @param data
* @param dataKey
* @param maxRowPerSheet
* @throws Exception
@SuppressWarnings("rawtypes")
public static void generateExcelByTemplate(String destFilePath,
String templateFilePath,
List header, String headerKey,
List data, String dataKey, int maxRowPerSheet) throws Exception {
generateExcelByTemplate(new FileOutputStream(destFilePath),
new FileInputStream(templateFilePath),
header, headerKey,
data, dataKey, maxRowPerSheet);
@SuppressWarnings({ "rawtypes", "unchecked" })
private static List&List& splitList(List data, int maxRowPerSheet) {
List&List& splitData = new ArrayList&List&();
List sdata =
for (int i = 0; i & data.size(); ++i) {
if (0 == i % maxRowPerSheet) {
if (null != sdata) {
splitData.add(sdata);
sdata = new ArrayList(maxRowPerSheet);
sdata.add(data.get(i));
if (0 != maxRowPerSheet % data.size()) {
splitData.add(sdata);
return splitD
List&VM& vms = new ArrayList&VM&();
for (int i = 0; i & 21; ++i) {
VM vma = new VM();
vma.setId(i);
vma.setName("我的CENTOS" + i);
vma.setPrice(103);
vma.setScale("2CPU, 2G MEM, 2T DISK");
vma.setCreated(new Date());
vms.add(vma);
ExcelUtil.generateExcelByTemplate("E:\\tmp\\ex-sample.xlsx", "E:\\tmp\\template-simple.xlsx", vms, "vms", 10);
运行结果:
可见有3个sheet生成。
接口中的动态表头是指表头是数据项中的字段,例如:日期,项目等。
例如下面这个模版:
调用示例:
List&String& dates = new ArrayList&String&();
int maxDates = 8;
for (int i = 0; i & maxD ++i) {
dates.add("" + i);
List&ItemCount& itemCounts = new ArrayList&ItemCount&();
for (int i = 0; i & 82; ++i) {
ItemCount ic = new ItemCount();
List&Integer& counts = new ArrayList&Integer&();
for (int j = 0; j & maxD ++j) {
counts.add(j);
ic.setCounts(counts);
ic.setName("item" + i);
itemCounts.add(ic);
ExcelUtil.generateExcelByTemplate("E:\\tmp\\ex-cpx.xlsx",
"E:\\tmp\\template-matrix.xlsx", dates, "dates", itemCounts, "itemsx", 12);
下载次数: 511
下载次数: 537
浏览 18970
你好,为什么我用你的demo运行后报异常了?大侠能否帮我看下?急。。。。。非常感谢log4j:WARN No appenders could be found for logger (net.sf.jxls.transformer.SheetTransformer).log4j:WARN Please initialize the log4j system properly.Exception in thread "main" java.lang.NullPointerException at net.sf.jxls.tag.ForEachTag.selectCollectionDataToProcess(ForEachTag.java:388) at net.sf.jxls.tag.ForEachTag.processOneRowTag(ForEachTag.java:239) at net.sf.jxls.tag.ForEachTag.process(ForEachTag.java:183) at net.sf.jxls.transformer.TagRowTransformer.transform(TagRowTransformer.java:32) at net.sf.jxls.transformer.SheetTransformer.transformSheet(SheetTransformer.java:88) at net.sf.jxls.transformer.XLSTransformer.transformWorkbook(XLSTransformer.java:248) at net.sf.jxls.transformer.XLSTransformer.transformMultipleSheetsList(XLSTransformer.java:371) at org.jamee.demo.poiexcel.ExcelUtils.generateExcelByTemplate(ExcelUtils.java:97) at org.jamee.demo.poiexcel.ExcelUtils.generateExcelByTemplate(ExcelUtils.java:141) at org.jamee.demo.poiexcel.POIExcelDemo.testExcelUtilsCpx(POIExcelDemo.java:266) at org.jamee.demo.poiexcel.POIExcelDemo.main(POIExcelDemo.java:232)作者已经在上面已经说了,只不过他没有在文件中修改;“注意:dataKey不能是items, items是保留字,如果用items则会提示:Collection is null并抛出NullPointerException ”所以修改template-matrix-bak.xls文件中的${items}为其他的名称并且与程序中的dataKey对应起来就可以了,比如修改为${vm},将方法testExcelUtilsCpx()中的&&&&&&& ExcelUtils.generateExcelByTemplate("E:\\tmp\\ex-cpx.xlsx",&&&&&&&&&&&&&&& "E:\\tmp\\template-matrix-bak.xlsx", dates, "dates", itemCounts, "vm", 12);倒数第二个参数也修改为vm就可以了
你好,为什么我用你的demo运行后报异常了?大侠能否帮我看下?急。。。。。非常感谢log4j:WARN No appenders could be found for logger (net.sf.jxls.transformer.SheetTransformer).log4j:WARN Please initialize the log4j system properly.Exception in thread "main" java.lang.NullPointerException at net.sf.jxls.tag.ForEachTag.selectCollectionDataToProcess(ForEachTag.java:388) at net.sf.jxls.tag.ForEachTag.processOneRowTag(ForEachTag.java:239) at net.sf.jxls.tag.ForEachTag.process(ForEachTag.java:183) at net.sf.jxls.transformer.TagRowTransformer.transform(TagRowTransformer.java:32) at net.sf.jxls.transformer.SheetTransformer.transformSheet(SheetTransformer.java:88) at net.sf.jxls.transformer.XLSTransformer.transformWorkbook(XLSTransformer.java:248) at net.sf.jxls.transformer.XLSTransformer.transformMultipleSheetsList(XLSTransformer.java:371) at org.jamee.demo.poiexcel.ExcelUtils.generateExcelByTemplate(ExcelUtils.java:97) at org.jamee.demo.poiexcel.ExcelUtils.generateExcelByTemplate(ExcelUtils.java:141) at org.jamee.demo.poiexcel.POIExcelDemo.testExcelUtilsCpx(POIExcelDemo.java:266) at org.jamee.demo.poiexcel.POIExcelDemo.main(POIExcelDemo.java:232)也碰到了,只知道是jar包冲突,暂时不知道怎么解决,有大虾解决的吗?用的poi3.9和jxls的1.0.5
请教下,你的代码能正常运行,但日期结果是数字?你的截图是格式化的日期规格 &&&&&&&&&&&&&&& 创建时间 价格2CPU, 2G MEM, 2T DISK
1032CPU, 2G MEM, 2T DISK
1032CPU, 2G MEM, 2T DISK
103应该是excel的显示问题
jamie.wang
浏览: 162055 次
来自: 成都
chen_bing8 写道你好,为什么我用你的demo运行后报 ...
java用poi和jxl对excel的读取还好,如果修改文件的 ...
大神 用webloginc或者websphere容器的时候 j ...
很有用,也没有报错,正在研究应用于项目
chen_bing8 写道你好,为什么我用你的demo运行后报 ...> 博客详情
该篇文章使用poi3.5的版本
需要导入包如下
* execl 数据导入
* @author 小涂
* @title : import_excel
* @date Aug 21, :42 PM
* @return String
public static String import_excel(){
String id=
String name=
Dormitory=
String Sept=
Workbook workbook =
int flag = 0;
//指示指针所访问的位置
String path="C:/Users/X/Desktop/212.xls";//获取文件的路径
InputStream is = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
// 循环工作表Sheet
for (int numSheet = 0; numSheet & hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
// 循环行Row
for (int rowNum = 1; rowNum &= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow == null) {
// 循环列Cell
// "学号","姓名","性别","寝室号","所在系"};
for (int cellNum = 0; cellNum &=4; cellNum++) {
HSSFCell xh = hssfRow.getCell(cellNum);
if (xh == null) {
System.out.print(getValue(xh)+"\t");
System.out.print("\n");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
* 得到Excel表中的值
* @param hssfCell
Excel中的每一个格子
* @return Excel中每一个格子中的值
@SuppressWarnings("static-access")
private static String getValue(HSSFCell hssfCell) {
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
// 返回布尔类型的值
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
// 返回数值类型的值
return String.valueOf(hssfCell.getNumericCellValue());
// 返回字符串类型的值
return String.valueOf(hssfCell.getStringCellValue());
导出execl 文件
* 导出execl 文件
* @author 小涂
* @title : extport
* @date Aug 21, :38 PM
* @return String
public String extport(){
List studentList=new ArrayList&Student&();//学生LIst
for(int i=0;i&10;i++)
Student student=new Student();//学生对象
student.setStudentId(""+i);
student.setStudentName("杨波"+i);
student.setStudentSex("男");
student.setStudentDormitory("14-20"+i);
student.setStudentSept("软件工程系");
studentList.add(student);
String []tableHeader={"学号","姓名","性别","寝室号","所在系"};
short cellNumber=(short)tableHeader.//表的列数
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个excel
HSSFCell cell =
//Excel的列
HSSFRow row =
//Excel的行
HSSFCellStyle style = workbook.createCellStyle();
//设置表头的类型
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFCellStyle style1 = workbook.createCellStyle();
//设置数据类型
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFFont font = workbook.createFont();
//设置字体
HSSFSheet sheet = workbook.createSheet("sheet1");
//创建一个sheet
HSSFHeader header = sheet.getHeader();//设置sheet的头
if(studentList.size() & 1 ){
header.setCenter("查无资料");
header.setCenter("学生表");
row = sheet.createRow(0);
row.setHeight((short)400);
for(int k = 0;k & cellNk++){
cell = row.createCell(k);//创建第0行第k列
cell.setCellValue(tableHeader[k]);//设置第0行第k列的值
sheet.setColumnWidth(k,8000);//设置列的宽度
font.setColor(HSSFFont.COLOR_NORMAL);
// 设置单元格字体的颜色.
font.setFontHeight((short)350); //设置单元字体高度
style1.setFont(font);//设置字体风格
cell.setCellStyle(style1);
for(int i = 0 ;i & studentList.size() ;i++){
Student student1 = (Student)studentList.get(i);//获取student对象
row = sheet.createRow((short) (i + 1));//创建第i+1行
row.setHeight((short)400);//设置行高
if(student1.getStudentId() != null){
cell = row.createCell(0);//创建第i+1行第0列
cell.setCellValue(student1.getStudentId());//设置第i+1行第0列的值
cell.setCellStyle(style);//设置风格
if(student1.getStudentName() != null){
cell = row.createCell(1); //创建第i+1行第1列
cell.setCellValue(student1.getStudentName());//设置第i+1行第1列的值
cell.setCellStyle(style); //设置风格
//由于下面的和上面的基本相同,就不加注释了
if(student1.getStudentSex() != null){
cell = row.createCell(2);
cell.setCellValue(student1.getStudentSex());
cell.setCellStyle(style);
if(student1.getStudentDormitory()!= null){
cell = row.createCell(3);
cell.setCellValue(student1.getStudentDormitory());
cell.setCellStyle(style);
if(student1.getStudentSept() != null){
cell = row.createCell(4);
cell.setCellValue(student1.getStudentSept());
cell.setCellStyle(style);
} catch (Exception e) {
e.printStackTrace();
// HttpServletResponse response =//创建一个HttpServletResponse对象
OutputStream out =
out = new FileOutputStream(new File("C:/Users/X/Desktop/212.xls"));
//response = ServletActionContext.getResponse();//初始化HttpServletResponse对象
//out = response.getOutputStream();//
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
String headerStr ="student学生";
headerStr =new String(headerStr.getBytes("gb2312"), "ISO8859-1");//headerString为中文时转码
response.setHeader("Content-disposition"," filename="+
headerStr+".xls");//filename是下载的xls的名,建议最好用英文
response.setContentType("application/charset=UTF-8");//设置类型
response.setHeader("Pragma","No-cache");//设置头
response.setHeader("Cache-Control","no-cache");//设置头
response.setDateHeader("Expires", 0);//设置日期头
workbook.write(out);
out.flush();
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
if(out!=null){
out.close();
}catch(IOException e){
e.printStackTrace();
如果你是在web应用是使用请将Response 和out 的代码打开
人打赏支持
码字总数 14107
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区

我要回帖

更多关于 java poi execl映射 的文章

 

随机推荐