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());
原文:http://www.cnblogs.com/dingjiaoyang/p/6111477.html