jxl导出Excel文件
一、java项目实现读取Excel文件和导出Excel文件
实现读取和导出Excel文件的代码:
package servlet;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class Excel { /**
* @param args
* Excel读写程序
* @throws IOException
* @throws BiffException
*/
public static void main(String[] args) throws BiffException, IOException {
//导出Excel文件
writeExcel();
//读取Excel文件
//readExcel();
} //读Excel文件
public static void readExcel() throws BiffException, IOException{
//创建一个list 用来存储读取的内容
List list = new ArrayList();
Workbook rwb = null;
Cell cell = null; //创建输入流
InputStream stream = new FileInputStream("d:\\testJXL.xls"); //获取Excel文件对象
rwb = Workbook.getWorkbook(stream); //获取文件的指定工作表 默认的第一个
Sheet sheet = rwb.getSheet(0); //行数(表头的目录不需要,从1开始)
for(int i=0; i<sheet.getRows(); i++){ //创建一个数组 用来存储每一列的值
String[] str = new String[sheet.getColumns()]; //列数
for(int j=0; j<sheet.getColumns(); j++){ //获取第i行,第j列的值
cell = sheet.getCell(j,i);
str[j] = cell.getContents(); }
//把刚获取的列存入list
list.add(str);
}
for(int i=0;i<list.size();i++){
String[] str = (String[])list.get(i);
for(int j=0;j<str.length;j++){
System.out.println(str[j]);
}
}
} /**
* 写Excel文件
*/
public static void writeExcel() {
String[] title = { "编号", "产品名称", "产品价格", "产品数量", "生产日期", "产地", "是否出口" };
try {
// 获得开始时间
long start = System.currentTimeMillis();
// 输出的excel的路径
String filePath = "e:\\testJXL.xls";
// 创建Excel工作薄
WritableWorkbook wwb;
// 新建立一个jxl文件,即在d盘下生成testJXL.xls
OutputStream os = new FileOutputStream(filePath);
wwb = Workbook.createWorkbook(os);
// 添加第一个工作表并设置第一个Sheet的名字
WritableSheet sheet = wwb.createSheet("产品清单", 0);
Label label;
for (int i = 0; i < title.length; i++) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
//label = new Label(i, 0, title[i]);
label = new Label(i, 0, title[i], getHeader());
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
}
// 下面是填充数据
/*
* 保存数字到单元格,需要使用jxl.write.Number 必须使用其完整路径,否则会出现错误
*/
// 填充产品编号
jxl.write.Number number = new jxl.write.Number(0, 1, 20071001);
sheet.addCell(number);
// 填充产品名称
label = new Label(1, 1, "金鸽瓜子");
sheet.addCell(label);
/*
* 定义对于显示金额的公共格式 jxl会自动实现四舍五入 例如 2.456会被格式化为2.46,2.454会被格式化为2.45
*/
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#,###.00");
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);
// 填充产品价格
jxl.write.Number nb = new jxl.write.Number(2, 1, 200000.45, wcf);
sheet.addCell(nb);
// 填充产品数量
jxl.write.Number numb = new jxl.write.Number(3, 1, 200);
sheet.addCell(numb);
/*
* 定义显示日期的公共格式 如:yyyy-MM-dd hh:mm
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String newdate = sdf.format(new Date());
// 填充出产日期
label = new Label(4, 1, newdate);
sheet.addCell(label);
// 填充产地
label = new Label(5, 1, "陕西西安");
sheet.addCell(label);
/*
* 显示布尔值
*/
jxl.write.Boolean bool = new jxl.write.Boolean(6, 1, true);
sheet.addCell(bool);
/*
* 合并单元格 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的
* 表示将从第x+1列,y+1行到m+1列,n+1行合并
*/
sheet.mergeCells(0, 3, 2, 3);
label = new Label(0, 3, "合并了三个单元格");
sheet.addCell(label);
/*
*
* 定义公共字体格式 通过获取一个字体的样式来作为模板 首先通过web.getSheet(0)获得第一个sheet
* 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体
*/
CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();
WritableCellFormat wc = new WritableCellFormat();
// 设置居中
wc.setAlignment(Alignment.CENTRE);
// 设置边框线
wc.setBorder(Border.ALL, BorderLineStyle.THIN);
// 设置单元格的背景颜色
wc.setBackground(jxl.format.Colour.RED);
label = new Label(1, 5, "字体", wc);
sheet.addCell(label); // 设置字体
jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"), 20);
WritableCellFormat font = new WritableCellFormat(wfont);
label = new Label(2, 6, "隶书", font);
sheet.addCell(label); // 写入数据
wwb.write();
// 关闭文件
wwb.close();
long end = System.currentTimeMillis();
System.out.println("----完成该操作共用的时间是:" + (end - start) / 1000);
} catch (Exception e) {
System.out.println("---出现异常---");
e.printStackTrace();
}
} /**
* 设置头的样式
* @return
*/
public static WritableCellFormat getHeader() {
WritableCellFormat format = null;
try {
WritableFont font = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD);// 定义字体
font.setColour(Colour.BLUE);// 蓝色字体
format = new WritableCellFormat(font);
format.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中
format.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 黑色边框
format.setBackground(Colour.YELLOW);// 黄色背景
} catch (WriteException e) {
e.printStackTrace();
}
return format;
}
}
导出结果:
二、web项目中实现导出Excel文件
2.1、新建动态web项目
新建项目后在项目中添加jxl-2.6.jar文件和servlet-api.jar文件。
2.2、新建数据实体对象Member.java
package entity; import java.util.Date;
public class Member implements java.io.Serializable { // Fields private String id; private String checkOrg; private String sn; private String memberName; private String sex; private String cardId; private String duty; private String title; private String academic; private String special; private String workTime; private String memo; private String role; private Date lastModify; private Date regTime; // Constructors /** default constructor */
public Member() {
} /** full constructor */
public Member(String checkOrg, String sn, String memberName, String sex,
String cardId, String duty, String title, String academic,
String special, String workTime, String memo, String role, Date lastModify, Date regTime) {
this.checkOrg = checkOrg;
this.sn = sn;
this.memberName = memberName;
this.sex = sex;
this.cardId = cardId;
this.duty = duty;
this.title = title;
this.academic = academic;
this.special = special;
this.workTime = workTime;
this.memo = memo;
this.role = role;
this.lastModify = lastModify;
this.regTime = regTime;
} // Property accessors public String getId() {
return this.id;
} public void setId(String id) {
this.id = id;
} public String getCheckOrg() {
return this.checkOrg;
} public void setCheckOrg(String checkOrg) {
this.checkOrg = checkOrg;
} public String getSn() {
return this.sn;
} public void setSn(String sn) {
this.sn = sn;
} public String getMemberName() {
return this.memberName;
} public void setMemberName(String memberName) {
this.memberName = memberName;
} public String getSex() {
return this.sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getCardId() {
return this.cardId;
} public void setCardId(String cardId) {
this.cardId = cardId;
} public String getDuty() {
return this.duty;
} public void setDuty(String duty) {
this.duty = duty;
} public String getTitle() {
return this.title;
} public void setTitle(String title) {
this.title = title;
} public String getAcademic() {
return this.academic;
} public void setAcademic(String academic) {
this.academic = academic;
} public String getSpecial() {
return this.special;
} public void setSpecial(String special) {
this.special = special;
} public String getWorkTime() {
return this.workTime;
} public void setWorkTime(String workTime) {
this.workTime = workTime;
} public String getMemo() {
return this.memo;
} public void setMemo(String memo) {
this.memo = memo;
} public String getRole() {
return this.role;
} public void setRole(String role) {
this.role = role;
} public Date getLastModify() {
return lastModify;
} public void setLastModify(Date lastModify) {
this.lastModify = lastModify;
} public Date getRegTime() {
return regTime;
} public void setRegTime(Date regTime) {
this.regTime = regTime;
} }
2.3、添加servlet文件:ExportExlServlet.java
package servlet; import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
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;
import entity.Member; public class ExportExlServlet extends HttpServlet { private WritableWorkbook wwb = null; private WritableSheet sheet = null; private WritableSheet sheetk = null; private WritableSheet sheeth = null; @Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String checkOrgId = null;
String orgName = "XX单位";
try {
exportCheckOrgMember(checkOrgId, orgName, response);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
exportExcel(response, wwb, orgName + "人员明细表");
} /**
* 导出数据处理
* @param checkOrgId
* @param orgName
* @param response
* @throws IOException
* @throws RowsExceededException
* @throws WriteException
*/ private void exportCheckOrgMember(String checkOrgId,String orgName, HttpServletResponse response)
throws IOException, RowsExceededException, WriteException {
//此处listMember需要从数据库中取值
List<Member> listMember = new ArrayList<Member>();
Member member1 = new Member("str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "隶书", "str", new Date(), new Date());
listMember.add(member1);
listMember.add(member1);
listMember.add(member1);
System.out.println(listMember.size()+"***"); response.setContentType("application/ms-excel");
String sheetName_ = orgName + "人员明细表";//文件名==》XX人员明细表
String sheetName = new String(sheetName_.getBytes(),"iso8859-1"); response.addHeader("Content-Disposition", "attachment;filename="+ sheetName + ".xls"); OutputStream os = response.getOutputStream();
wwb = Workbook.createWorkbook(os);
wwb.setProtected(false); //EXECL中的一个sheet
sheetk = wwb.createSheet("人员明细", 0); //============设置execl表的一些属性===========
WritableFont wf = new WritableFont(WritableFont.ARIAL, 13,WritableFont.BOLD, false);
WritableCellFormat wcf = new WritableCellFormat(wf);
WritableFont wf1 = new WritableFont(WritableFont.ARIAL, 13,WritableFont.NO_BOLD, false);
WritableCellFormat wcf1 = new WritableCellFormat(wf1);
wcf.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf1.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);
//============设置execl表的一些属性======END===== /*sheetk.mergeCells(0, 0, 9, 0);
sheetk.addCell(new Label(0, 0, "人员明细表《这是合并的单元格》", wcf)); //添加单元格 new Label(列位置,行位置,单元格内容,WritableCellFormat对象)
//此处第二个参数1,代表第二行,上面合并的单元格是第一行
sheetk.addCell(new Label(0, 1, "序号", wcf));
sheetk.addCell(new Label(1, 1, "姓名", wcf));
sheetk.addCell(new Label(2, 1, "性别", wcf));
sheetk.addCell(new Label(3, 1, "身份证号", wcf));
sheetk.addCell(new Label(4, 1, "学历", wcf));
sheetk.addCell(new Label(5, 1, "专业", wcf));
sheetk.addCell(new Label(6, 1, "职称", wcf));
sheetk.addCell(new Label(7, 1, "职务", wcf));
sheetk.addCell(new Label(8, 1, "角色", wcf));
sheetk.addCell(new Label(9, 1, "备注", wcf));*/ String[] title = {"编号", "姓名", "性别", "身份证号", "学历", "专业", "职称", "职务", "角色", "备注"};
Label label;
for (int i = 0; i < title.length; i++) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
//label = new Label(i, 0, title[i]);
label = new Label(i, 0, title[i], Excel.getHeader());
// 将定义好的单元格添加到工作表中
sheetk.addCell(label);
}
// 设置字体 jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("隶书"), 20);
WritableCellFormat font = new WritableCellFormat(wfont);
//循环数据,将数据填充到单元格内
int t = 1;
for (Member member:listMember) {
sheetk.addCell(new Label(0, t, t+"", wcf1));
sheetk.addCell(new Label(1, t, member.getMemberName(), wcf1));
sheetk.addCell(new Label(2, t, member.getSex(), wcf1));
sheetk.addCell(new Label(3, t, member.getCardId(), wcf1));
sheetk.addCell(new Label(4, t, member.getAcademic(), wcf1));
sheetk.addCell(new Label(5, t, member.getSpecial(), wcf1));
sheetk.addCell(new Label(6, t, member.getTitle(), wcf1));
sheetk.addCell(new Label(7, t, member.getDuty(), wcf1));
sheetk.addCell(new Label(8, t, member.getRole(), wcf1));
sheetk.addCell(new Label(9, t, member.getMemo(), font));
t++;
}
} /*
* 执行导出操作
*/
private void exportExcel(HttpServletResponse response,
WritableWorkbook retValue, String filename) {
response.setContentType("application/ms-excel");
/*response.addHeader("Content-Disposition", "attachment; filename="
+ filename + ".xls");*/
try {
retValue.write();
retValue.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
2.4、在web.xml文件中添加servlet配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ExportExlServlet</servlet-name>
<servlet-class>servlet.ExportExlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExportExlServlet</servlet-name>
<url-pattern>/ExportExlServlet</url-pattern>
</servlet-mapping>
</web-app>
2.5、添加index.jsp请求servlet
<body>
This is my JSP page. <br>
<a href="ExportExlServlet">导出数据</a>
</body>
导出结果:
源码下载地址:https://github.com/ablejava/Jxl-Excel
jxl导出Excel文件的更多相关文章
- java导入、导出Excel文件
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- Java web项目JXl导出excel,(从eclipse上移动到tomact服务器上,之路径更改)
我用的是jxl导出excel,比较简单,最开始我是固定路径不能选择,很局限,后来改了,而且固定路径当把项目放在服务器上时,路径不可行. 在网上各位大神的帮助成功设置响应头,并且可选保存路径. 1.前端 ...
- ExtJS Grid导出excel文件
ExtJS Grid导出excel文件, 需下载POI:链接:http://pan.baidu.com/s/1i3lkPhF 密码:rqbg 1.将Grid表格数据连同表格列名传到后台 2.后台导出e ...
- PHP从数据库导出EXCEL文件
参考博客链接:http://www.cnblogs.com/huangcong/p/3687665.html 我的程序代码 原生导出Excel文件 <?phpheader('Content-ty ...
- PHP导出excel文件
现在教教你如何导入excel文件: 在我的文件储存里面有一个com文件夹的,将其解压放在ThinkPHP/Library/文件夹里面,然后就是写控制器啦!去调用这个插件: <?php names ...
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- PHPExcel导出excel文件
今天园子刚开,先来个货顶下,后续园丁qing我会再慢慢种园子的,希望大家多来园子逛逛. PHPExcel导出excel文件,先说下重要的参数要记住的东西 impUser() 导入方法 exportEx ...
- 导出Excel文件
/// <summary> /// 类说明:Assistant /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http ...
- Java:JXL解析Excel文件
项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...
随机推荐
- SQL SERVER 移动系统数据库
移动系统数据库在下列情况下可能很有用: 故障恢复.例如,数据库处于可疑模式下或因硬件故障而关闭. 计划的重定位. 为预定的磁盘维护操作而进行的重定位. 移动 Master 数据库 在“开始”菜 ...
- IIS 日志文件分析
先安装下文参考资料中的log parser studio 然后就可以针对日志文件进行sql语句的查询了. 各页面访问量排行 ) FROM '[LOGFILEPATH]' where cs-uri-st ...
- CLR VIA
标题 状态 内容 什么是CLR? 什么是托管模块? 托管模块由什么组成? .net代码的执行过程 http://www.cnblogs.com/aaa6818162/p/4726581.ht ...
- 管理批量邮箱 FOXMAIL 和网易闪电邮(PC端)有什么区别? 对比
喜欢用FOXMAIL有订阅功能<img src="https://pic1.zhimg.com/fa72df2440f84043a5275b90df30b2f4_b.jpg&q ...
- ART:Android 摆脱卡顿的希望?
与 iOS 相比,Android 的用户体验有个相对糟糕的开始.在很长的时间里,界面一直丑小鸭,卡顿也是挥不去的痛.不过,在 Google 的全力推动,以及硬件厂商的响应下,Android 还是跨越各 ...
- (转)2G到C-RAN网络架构的演进
这是我一个学霸师弟写的一篇知识普及的文章,涉及到的知识结构很全面,很丰富,对网络通信技术感兴趣的童鞋可以看看,内容我就不贴过来了,直接到他博客上去看吧. 2G到C-RAN网络结构演进
- WIN7 64位如何添加网络打印机
http://wenku.baidu.com/view/2d64bef0f61fb7360b4c65ac.html 该文介绍的比较详细,并且我按照他的方法,确实安装成功了.
- 二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- MyBatis知多少(3)
解决存储过程固有限制的方法之一就是将SQL嵌入到更加通用的语言中去.与存储过程将业务逻辑移入数据库相反,内联SQL将SQL从数据库移入了应用程序代码.这就使得SQL语句可以直接与语言进行交互.从某种意 ...
- Java知多少(107)几个重要的java数据库访问类和接口
编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...