1 package com.tgb.test;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import jxl.Cell;
9 import jxl.Sheet;
10 import jxl.Workbook;
11 import jxl.write.Label;
12 import jxl.write.Number;
13 import jxl.write.WritableImage;
14 import jxl.write.WritableSheet;
15 import jxl.write.WritableWorkbook;
16 import jxl.write.WriteException;
17
18 import org.apache.commons.lang3.math.NumberUtils;
19 import org.junit.Test;
20 //import org.junit.Test;
21 public class JxlDemo {
22 /**
23 * 导入(导入到内存)
24 */
25 @Test
26 public void importExcel() {
27 Workbook book = null;
28 try {
29 book = Workbook.getWorkbook(new File("D:/test/test.xls"));
30 // 获得第一个工作表对象
31 Sheet sheet = book.getSheet(0);
32 int rows=sheet.getRows();
33 int columns=sheet.getColumns();
34 // 遍历每行每列的单元格
35 for(int i=0;i<rows;i++){
36 for(int j=0;j<columns;j++){
37 Cell cell = sheet.getCell(j, i);
38 String result = cell.getContents();
39 if(j==0){
40 System.out.print("姓名:"+result+" ");
41 }
42 if(j==1){
43 System.out.print("年龄:"+result+" ");
44 }
45 if((j+1)%2==0){
46 System.out.println();
47 }
48 }
49 }
50 System.out.println("========");
51 // 得到第一列第一行的单元格
52 Cell cell1 = sheet.getCell(0, 0);
53 String result = cell1.getContents();
54 System.out.println(result);
55 System.out.println("========");
56 } catch (Exception e) {
57 System.out.println(e);
58 }finally{
59 if(book!=null){
60 book.close();
61 }
62 }
63 }
64
65 /**
66 * 导出(导出到磁盘)
67 */
68 @Test
69 public void exportExcel() {
70 WritableWorkbook book = null;
71 try {
72 // 打开文件
73 book = Workbook.createWorkbook(new File("D:/test/test.xls"));
74 // 生成名为"学生"的工作表,参数0表示这是第一页
75 WritableSheet sheet = book.createSheet("学生", 0);
76 // 指定单元格位置是第一列第一行(0, 0)以及单元格内容为张三
77 Label label = new Label(0, 0, "张三");
78 // 将定义好的单元格添加到工作表中
79 sheet.addCell(label);
80 // 保存数字的单元格必须使用Number的完整包路径
81 jxl.write.Number number = new jxl.write.Number(1, 0, 30);
82 sheet.addCell(number);
83 // 写入数据并关闭文件
84 book.write();
85 } catch (Exception e) {
86 System.out.println(e);
87 }finally{
88 if(book!=null){
89 try {
90 book.close();
91 } catch (Exception e) {
92 e.printStackTrace();
93 }
94 }
95 }
96 }
97
98 /**
99 * 对象数据写入到Excel
100 */
101 @Test
102 public void writeExcel() {
103 WritableWorkbook book = null;
104 try {
105 // 打开文件
106 book = Workbook.createWorkbook(new File("D:/test/stu.xls"));
107 // 生成名为"学生"的工作表,参数0表示这是第一页
108 WritableSheet sheet = book.createSheet("学生", 0);
109
110 List<Student> stuList=queryStudentList();
111 if(stuList!=null && !stuList.isEmpty()){
112 for(int i=0; i<stuList.size(); i++){
113 sheet.addCell(new Label(0, i, stuList.get(i).getName()));
114 sheet.addCell(new Number(1, i, stuList.get(i).getAge()));
115 }
116 }
117
118 // 写入数据并关闭文件
119 book.write();
120 } catch (Exception e) {
121 System.out.println(e);
122 }finally{
123 if(book!=null){
124 try {
125 book.close();
126 } catch (Exception e) {
127 e.printStackTrace();
128 }
129 }
130 }
131
132 }
133
134 /**
135 * 读取Excel数据到内存
136 */
137 @Test
138 public void readExcel() {
139 Workbook book = null;
140 try {
141 // 打开文件
142 book = Workbook.getWorkbook(new File("D:/test/stu.xls"));
143 // 获得第一个工作表对象
144 Sheet sheet = book.getSheet(0);
145 int rows=sheet.getRows();
146 int columns=sheet.getColumns();
147 List<Student> stuList=new ArrayList<Student>();
148 // 遍历每行每列的单元格
149 for(int i=0;i<rows;i++){
150 Student stu = new Student();
151 for(int j=0;j<columns;j++){
152 Cell cell = sheet.getCell(j, i);
153 String result = cell.getContents();
154 if(j==0){
155 stu.setName(result);
156 }
157 if(j==1){
158 stu.setAge(NumberUtils.toInt(result));
159 }
160 if((j+1)%2==0){
161 stuList.add(stu);
162 stu=null;
163 }
164 }
165 }
166
167 //遍历数据
168 for(Student stu : stuList){
169 System.out.println(String.format("姓名:%s, 年龄:%s",
170 stu.getName(), stu.getAge()));
171 }
172
173 } catch (Exception e) {
174 System.out.println(e);
175 }finally{
176 if(book!=null){
177 try {
178 book.close();
179 } catch (Exception e) {
180 e.printStackTrace();
181 }
182 }
183 }
184
185 }
186
187 /**
188 * 图片写入Excel,只支持png图片
189 */
190 @Test
191 public void writeImg() {
192 WritableWorkbook wwb = null;
193 try {
194 wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));
195 WritableSheet ws = wwb.createSheet("图片", 0);
196 File file = new File("D:\\test\\png.png");
197 //前两位是起始格,后两位是图片占多少个格,并非是位置
198 WritableImage image = new WritableImage(1, 4, 6, 18, file);
199 ws.addImage(image);
200 wwb.write();
201 } catch (Exception e) {
202 e.printStackTrace();
203 }finally{
204 if(wwb!=null){
205 try {
206 wwb.close();
207 } catch (Exception e) {
208 e.printStackTrace();
209 }
210 }
211 }
212 }
213
214 private List<Student> queryStudentList(){
215 List<Student> stuList=new ArrayList<Student>();
216 stuList.add(new Student("zhangsan", 20));
217 stuList.add(new Student("lisi", 25));
218 stuList.add(new Student("wangwu", 30));
219 return stuList;
220 }
221
222 public class Student {
223 private String name;
224 private int age;
225
226 public Student() {
227 }
228
229 public Student(String name, int age) {
230 super();
231 this.name = name;
232 this.age = age;
233 }
234
235 public String getName() {
236 return name;
237 }
238
239 public void setName(String name) {
240 this.name = name;
241 }
242
243 public int getAge() {
244 return age;
245 }
246
247 public void setAge(int age) {
248 this.age = age;
249 }
250 }
251 }

以上的代码简单明了的示范了JXL的导入导出功能,具体的导入导出工具类都是在此基础上建立起来的。在最近的项目中出现了一个小问题,就是导出Excel的文件名如果是中文就会出现乱码,所以需要做一些简单的处理,

response.setHeader("Content-disposition", "attachment; filename="+ new String( fileName.getBytes("gb2312"), "ISO8859-1" )+ ".xls");

  更加详细健壮的设置如下:

 
fileName = new String(fileName.getBytes(),"iso-8859-1");
response.setCharacterEncoding("gb2312");
response.reset();
response.setContentType("application/OCTET-STREAM;charset=gb2312");
response.setHeader("pragma", "no-cache");
response.addHeader("Content-Disposition", "attachment;filename=\""
+ fileName + ".xls\"");// 点击导出excle按钮时候页面显示的默认名称
workbook = Workbook.createWorkbook(response.getOutputStream());

jxl导入导出实例的更多相关文章

  1. jxl导入/导出excel

    1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOException; import ...

  2. jxl导入/导出excel(网上的案例)

    jxl导入/导出excel 1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOExc ...

  3. oracle数据库的导入 导出实例

    oracle数据库的导入 导出实例 分类: DataBase2011-09-07 23:25 377人阅读 评论(0) 收藏 举报 数据库oraclefileusercmdservice 我要从另外一 ...

  4. 1、jxl导入/导出excel案例,黏贴即可运行

    package junit.test; import java.io.File; import java.io.IOException; import java.util.ArrayList; imp ...

  5. java实现文件批量导入导出实例(兼容xls,xlsx)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  6. 用poi框架进行批量导入导出实例

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能.我们这里使用poi对数据库中的数据进行批量导出,以及 ...

  7. java struts jxl 导入导出Excel(无模板)

    jar包: import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.Fil ...

  8. Excel jxl导入导出

    JAVA EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Wind ...

  9. .NET中的CSV导入导出(实例)

    导入代码,从csv文件得到datatable         /// <summary>        /// Get Data From Csv File         /// (Th ...

随机推荐

  1. 应用程序框架实战十六:DDD分层架构之值对象(介绍篇)

    前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使用DDD分层架构,但你却从来没有使 ...

  2. 遇到 HTTP 错误 403.14 - Forbidden?

    打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...

  3. geotrellis使用(十三)数据导入BUG解决方案说明

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG说明 解决方案 总结 一.前言         ...

  4. 10个惊艳的Swift单行代码

    几年前,一篇表述“10个Scala函数式单行代码”的文章非常受欢迎,并且随后立马出现了其他的语言版本,例如Haskell版本,Ruby版本,Groovy版本,Clojure版本,Python版本,C# ...

  5. FreeMarker模板开发指南知识点梳理

    freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生 ...

  6. Kooboo CMS - Html.FrontHtml.Position 详解

    DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.micr ...

  7. mongodb-基础-update-remove

    1.一些操作 collection重命名: > db.post.renameCollection('foo') { "ok" : 1 } > show collecti ...

  8. CSS魔法堂:Box-Shadow没那么简单啦:)

    前言  说起box-shadow那第一个想法当然就是用来实现阴影,其实它还能用于实现其他好玩的效果的,本篇就打算说说box-shadow的那些事. 二话不说看效果 3D小球 <style typ ...

  9. QTableWidget详解(样式、右键菜单、表头塌陷、多选等)

    在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是最基本的,有一些比较经常遇到的问题也说得不太清楚.所以,今天就在这里总结一下! 以下为个人模拟Windo ...

  10. 关系数据库SQL之可编程性事务

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程,本文来介绍一下事务的使用.(还是以前面的银 ...