jxl导出Excel
首先先在自己工程中导入jxl的jar包;
疯狂google后找到一段别人的导出excel方法,先备份于下面:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExportData {
/** *//**
* 导出数据为XLS格式
* @param fileName 文件的名称,可以设为绝对路径,也可以设为相对路径
* @param content 数据的内容
*/
public static void exportExcel(String fileName, Vector<Person> content) {
WritableWorkbook wwb;
FileOutputStream fos;
try {
fos = new FileOutputStream(fileName);
wwb = Workbook.createWorkbook(fos);
WritableSheet ws = wwb.createSheet("三国志武将列表", 10); // 创建一个工作表
// 设置单元格的文字格式
WritableFont wf = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,false,
UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
WritableCellFormat wcf = new WritableCellFormat(wf);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf.setAlignment(Alignment.CENTRE);
ws.setRowView(1, 500);
// 填充数据的内容
Person[] p = new Person[content.size()];
for (int i = 0; i < content.size(); i++){
p[i] = (Person)content.get(i);
ws.addCell(new Label(1, i + 1, p[i].getName(), wcf));
ws.addCell(new Label(2, i + 1, p[i].getNickname(), wcf));
ws.addCell(new Label(3, i + 1, p[i].getPower(), wcf));
ws.addCell(new Label(4, i + 1, p[i].getWit(), wcf));
ws.addCell(new Label(5, i + 1, p[i].getPolity(), wcf));
ws.addCell(new Label(6, i + 1, p[i].getCharm(), wcf));
ws.addCell(new Label(7, i + 1, p[i].getStory(), wcf));
if(i == 0)
wcf = new WritableCellFormat();
}
wwb.write();
wwb.close();
} catch (IOException e){
} catch (RowsExceededException e){
} catch (WriteException e){}
}
/** *//**
* 从Excel文件里读取数据保存到Vector里
* @param fileName Excel文件的名称
* @return Vector对象,里面包含从Excel文件里获取到的数据
*/
public static Vector<Person> importExcel(String fileName){
Vector<Person> v = new Vector<Person>();
try {
Workbook book = Workbook.getWorkbook(new File(fileName));
Sheet sheet = book.getSheet(0); // 获得第一个工作表对象
int rows = sheet.getRows();
for(int i = 0; i < rows; i++) {
Cell [] cell = sheet.getRow(i);
if(cell.length == 0)
continue;
Person p = new Person();
p.setName(sheet.getCell(1, i).getContents());
p.setNickname(sheet.getCell(2, i).getContents());
p.setPower(sheet.getCell(3, i).getContents());
p.setWit(sheet.getCell(4, i).getContents());
p.setPolity(sheet.getCell(5, i).getContents());
p.setCharm(sheet.getCell(6, i).getContents());
p.setStory(sheet.getCell(7, i).getContents());
v.add(p);
}
book.close();
}catch(Exception e) {}
return v;
}
public static void main(String [] args){
String fileName = "C:\\test.xls";
String fileNameNew = "C:\\testNew.xls";
Person p0 = new Person("姓名","字","武力","智力","政治","魅力","英雄事迹");
Person p1 = new Person("赵云","子龙","98","84","83","87","单骑救主!!!");
Person p2 = new Person("马超","孟起","98","62","40","88","杀得曹操割须弃袍!!!");
Person p3 = new Person("诸葛亮","孔明","55","100","92","93","死后木偶退兵,锦囊杀魏延!!!");
Vector<Person> v = new Vector<Person>();
v.add(p0);
v.add(p1);
v.add(p2);
v.add(p3);
exportExcel(fileName, v);
System.out.println("成功导出数据到Excel文件(" + fileName + ")了!!!");
// Vector<Person> vector = importExcel(fileName);
// System.out.println("成功从Excel文件(" + fileName + ")导入数据!!!");
//
// exportExcel(fileNameNew, vector);
// System.out.println("成功将" + fileName + "里的数据手复制到" + fileNameNew + "中!!!");
}
}
上面的方法很好,导出我试过了,很好用,但它只实现了自动生成了excel文件;但是我们项目要求的是:弹出保存/打开excel的对话框,然后直接打开或输入路径再保存;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Vector;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExportExcel {
public static void exportExcel( Object objIn,Object objOut) {
try {
//取得response HttpServletResponse
HashMap hmOut = (HashMap)objOut;
HashMap hmIn = (HashMap)objIn;
HttpServletResponse response=(HttpServletResponse)hmIn.get("response");
//设置table列名
String excelName =(String)hmIn.get("excelName");
String[] excelNameArray = excelName.split(",");
//取得key
String[] excelKeyArray = (String[])hmOut.get("excelKey");
OutputStream os = response.getOutputStream();// 取得输出流
response.reset();// 清空输出流
response.setHeader("Content-disposition", "attachment; filename="+new String("Book1".getBytes("GB2312"),"8859_1")+".xls");// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel文件
WritableSheet ws = wwb.createSheet("Sheet1", 10); // 创建一个工作表
// 设置单元格的文字格式
WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
WritableCellFormat wcf = new WritableCellFormat(wf);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf.setAlignment(Alignment.CENTRE);
ws.setRowView(0, 500);
// 填充数据的内容
int len=((String[])hmOut.get(excelKeyArray[0])).length;
//设置列头名
for (int j=0;j<excelKeyArray.length;j++){
ws.addCell(new Label(j, 0, excelNameArray[j], wcf));
}
//设置内容
wcf = new WritableCellFormat();
for (int i = 0; i <len; i++){
for (int j=0;j<excelKeyArray.length;j++){
ws.addCell(new Label(j, i+1, ((String[])hmOut.get(excelKeyArray[j]))[i], wcf));
}
}
wwb.write();
wwb.close();
} catch (IOException e){
} catch (RowsExceededException e){
} catch (WriteException e){}
}
}
注:现在弹出对话框,就是说要用io流的方式,io流就要从response中取;这里要导入tomcat里的一个jar:servlet.jar
jxl导出Excel的更多相关文章
- JXL导出Excel(只支持xls版本)——(一)
注意: 导出的后缀是xls可以直接打开,如果导出的后缀是xlsx打开报错,需要手动将名字改为xls才可以打开.也就是JXL不可以导出xlsx的excel. Jar包
- jxl导出excel的问题
jxl导出excel,通常浏览器会提示excel导出完成情况及默认保存路径,或让用户自定义选择保存路径,要达到这种效果,有些要做下修改,如:response是jsp的内置对象,在jsp中使用时不用声明 ...
- Java web项目JXl导出excel,(从eclipse上移动到tomact服务器上,之路径更改)
我用的是jxl导出excel,比较简单,最开始我是固定路径不能选择,很局限,后来改了,而且固定路径当把项目放在服务器上时,路径不可行. 在网上各位大神的帮助成功设置响应头,并且可选保存路径. 1.前端 ...
- jxl导出Excel中需要跳过的的坑
正如上篇文章(JXL封装不能使用static关键字问题)所说,在jxl导出Excel时候如果频繁使用到WritableCellFormat去设置单元格的样式,这个时候经常会出现两种情况: 1.报警告: ...
- java中使用jxl导出Excel表格详细通用步骤
该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...
- jxl导出Excel文件
一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; im ...
- poi 和jxl导出excel(2)
controller: /** * 导出报表 * @return */ @RequestMapping(value = "/export") @ResponseBody publi ...
- JXL导出Excel工具类
将Excel中的数据读取到List<Map<String, Object>>集合中 package com.mvc.util; import java.io.File; ...
- JAVA利用JXL导出 EXCEL (在原有的excel模板上把数据导到excel上)
添加依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>j ...
随机推荐
- mybatis+springmvc缓存设置
开始接触mybatis,本以为缓存设置好麻烦,在网上找了好多相关的资料,说得也都好复杂,经过自己亲自实践,其实很简单的. 首先引入需要的jar包,参照pom.xml配置: <!-- 缓存设置 s ...
- Dll的链接使用细节
关于Dll Dll.Exe 都是PE格式的二进制文件. Dll相当于Linux操作系统下的so文件 1 基地址(Base Address)和相对地址(RelativeVirtual Address) ...
- thinkphp自动完成、软删除 和时间戳
thinkphp自动完成.软删除 和时间戳 一.总结 自动完成:没有手动赋值的情况下进行手动处理 软删除:实现假删除,可以进行恢复 时间戳:系统支持自动写入创建和更新的时间戳字段 二.thinkphp ...
- 什么是网站CDN服务,CDN加速原理?
转载:http://server.zzidc.com/fwqcjwt/728.html 摘要:在为您的网站打开速度发愁吗?您有没有发现有些大网站每天拥有几十万或者上百万,甚至几亿用户的访问,而且不同用 ...
- Gradle自己定义插件
Gradle自己定义插件 在Gradle中创建自己定义插件,Gradle提供了三种方式: 在build.gradle脚本中直接使用 在buildSrc中使用 在独立Module中使用 开发Gradle ...
- php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了)
php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了) 一.总结 日常出错很容易是分号或者$符号忘记写了 二.php实现求最小的k个数 题目描述 输入n个整数,找出其中最小的K个数.例如输 ...
- 【心情】bjdldrz
如果我对勇士的记忆停留在73胜10负,
- Snmp常用oid
http://blog.csdn.net/youngqj/article/details/7311849 系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2 ...
- jquery-2 jQuery原理和核心方法(多看学习视频)
jquery-2 jQuery原理和核心方法(多看学习视频) 一.总结 一句话总结:jQuery就是普通的js对象,只不过方法比较多而已,属性就length一个. 1.jquery的链式操作的底层原 ...
- Java-Maven项目引入UEditor图片上传组件jar包类库的5种方式
最近,硬是和百度的UEditor组件杠上了.自己的个人官网项目,很容易就搞定了,公司的项目,尼玛,各种问题.项目多了,环境复杂了,解决问题的方法也得不断调整. 项目用Maven管理jar包,用到了UE ...