jxl导入/导出excel(网上的案例)
假如你現在還在為自己的技術擔憂,假如你現在想提升自己的工資,假如你想在職場上獲得更多的話語權,假如你想順利的度過35歲這個魔咒,假如你想體驗BAT的工作環境,那么現在請我們一起開啟提升技術之旅吧,詳情請點擊http://106.12.206.16:8080/qingruihappy/index.html
?
jxl導入/導出excel
1、jxl導入/導出excel案例,黏貼即可運行
package junit.test;import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List;import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException;import org.apache.commons.lang3.math.NumberUtils; import org.junit.Test;/*** Excel導入導出* * @author 林計欽* @version 1.0 Feb 7, 2014 4:14:51 PM*/ public class ExcelTest {/*** 導入(導入到內存)*/@Testpublic void importExcel() {Workbook book = null;try {book = Workbook.getWorkbook(new File("D:/test/測試.xls"));// 獲得第一個工作表對象Sheet sheet = book.getSheet(0);int rows=sheet.getRows();int columns=sheet.getColumns();// 遍歷每行每列的單元格for(int i=0;i<rows;i++){for(int j=0;j<columns;j++){Cell cell = sheet.getCell(j, i);String result = cell.getContents();if(j==0){System.out.print("姓名:"+result+" ");}if(j==1){System.out.print("年齡:"+result+" ");}if((j+1)%2==0){ System.out.println();}}}System.out.println("========");// 得到第一列第一行的單元格Cell cell1 = sheet.getCell(0, 0);String result = cell1.getContents();System.out.println(result);System.out.println("========");} catch (Exception e) {System.out.println(e);}finally{if(book!=null){book.close();}}}/*** 導出(導出到磁盤)*/@Testpublic void exportExcel() {WritableWorkbook book = null;try {// 打開文件book = Workbook.createWorkbook(new File("D:/test/測試.xls"));// 生成名為"學生"的工作表,參數0表示這是第一頁WritableSheet sheet = book.createSheet("學生", 0);// 指定單元格位置是第一列第一行(0, 0)以及單元格內容為張三Label label = new Label(0, 0, "張三");// 將定義好的單元格添加到工作表中sheet.addCell(label);// 保存數字的單元格必須使用Number的完整包路徑jxl.write.Number number = new jxl.write.Number(1, 0, 30);sheet.addCell(number);// 寫入數據并關閉文件book.write();} catch (Exception e) {System.out.println(e);}finally{if(book!=null){try {book.close();} catch (Exception e) {e.printStackTrace();} }}}/*** 對象數據寫入到Excel*/@Testpublic void writeExcel() {WritableWorkbook book = null;try {// 打開文件book = Workbook.createWorkbook(new File("D:/test/stu.xls"));// 生成名為"學生"的工作表,參數0表示這是第一頁WritableSheet sheet = book.createSheet("學生", 0);List<Student> stuList=queryStudentList();if(stuList!=null && !stuList.isEmpty()){for(int i=0; i<stuList.size(); i++){sheet.addCell(new Label(0, i, stuList.get(i).getName()));sheet.addCell(new Number(1, i, stuList.get(i).getAge()));}}// 寫入數據并關閉文件book.write();} catch (Exception e) {System.out.println(e);}finally{if(book!=null){try {book.close();} catch (Exception e) {e.printStackTrace();} }}}/*** 讀取Excel數據到內存*/@Testpublic void readExcel() {Workbook book = null;try {// 打開文件book = Workbook.getWorkbook(new File("D:/test/stu.xls"));// 獲得第一個工作表對象Sheet sheet = book.getSheet(0);int rows=sheet.getRows();int columns=sheet.getColumns();List<Student> stuList=new ArrayList<Student>();// 遍歷每行每列的單元格for(int i=0;i<rows;i++){Student stu = new Student();for(int j=0;j<columns;j++){Cell cell = sheet.getCell(j, i);String result = cell.getContents();if(j==0){stu.setName(result);}if(j==1){stu.setAge(NumberUtils.toInt(result));}if((j+1)%2==0){stuList.add(stu);stu=null;}}}//遍歷數據for(Student stu : stuList){System.out.println(String.format("姓名:%s, 年齡:%s", stu.getName(), stu.getAge()));}} catch (Exception e) {System.out.println(e);}finally{if(book!=null){try {book.close();} catch (Exception e) {e.printStackTrace();} }}}/*** 圖片寫入Excel,只支持png圖片*/@Testpublic void writeImg() {WritableWorkbook wwb = null;try {wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));WritableSheet ws = wwb.createSheet("圖片", 0);File file = new File("D:\\test\\png.png");//前兩位是起始格,后兩位是圖片占多少個格,并非是位置WritableImage image = new WritableImage(1, 4, 6, 18, file);ws.addImage(image);wwb.write();} catch (Exception e) {e.printStackTrace();}finally{if(wwb!=null){try {wwb.close();} catch (Exception e) {e.printStackTrace();} }}}private List<Student> queryStudentList(){List<Student> stuList=new ArrayList<Student>();stuList.add(new Student("zhangsan", 20));stuList.add(new Student("lisi", 25));stuList.add(new Student("wangwu", 30));return stuList;}public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}} }
2、jxl常用操作
a、數據格式化
在Excel中不涉及復雜的數據類型,能夠比較好的處理字符串、數字和日期已經能夠滿足一般的應用。
字串格式化
字符串的格式化涉及到的是字體、粗細、字號等元素,這些功能主要由WritableFont和WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句,為方便敘述,我們為每一行命令加了編號:
其中,
①指定了字串格式:字體為TIMES,字號16,加粗顯示。
WritableFont有非常豐富的構造子函數,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。
②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種屬性,后面的單元格格式化中會有更多描述。?
③處使用了Label類的構造子,指定了字串被賦予那種格式。在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們上面的實例,可以指定:
b、單元格操作
Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合并等,所幸jExcelAPI提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。
1、合并單元格
//作用是從(m,n)到(p,q)的單元格全部合并
WritableSheet.mergeCells(int m, int n, int p, int q);?
比如:
c、行高和列寬
//作用是指定第i+1行的高度
WritableSheet.setRowView(int i, int height);
比如:將第一行的高度設為200
//作用是指定第i+1列的寬度,
WritableSheet.setColumnView(int i,int width);
比如:將第一列的寬度設為30
d、操作圖片(只支持png圖片)
/*** 圖片寫入Excel,只支持png圖片*/@Testpublic void writeImg() {WritableWorkbook wwb = null;try {wwb = Workbook.createWorkbook(new File("D:/test/image.xls"));WritableSheet ws = wwb.createSheet("圖片", 0);File file = new File("D:\\test\\png.png");//前兩位是起始格,后兩位是圖片占多少個格,并非是位置WritableImage image = new WritableImage(1, 4, 6, 18, file);ws.addImage(image);wwb.write();} catch (Exception e) {e.printStackTrace();}finally{if(wwb!=null){try {wwb.close();} catch (Exception e) {e.printStackTrace();} }}}很簡單和插入單元格的方式一樣,不過就是參數多了些,WritableImage這個類繼承了 Draw,上面只是他構造方法的一種,最后一個參數不用說了,前面四個參數的類型都是double,依次是 x, y, width, height,注意,這里的寬和高可不是圖片的寬和高,而是圖片所要占的單元格的個數,因為繼承的Draw所以他的類型必須是double,具體里面怎么實現的我還沒細看:)因為著急趕活,先完成功能,其他的以后有時間慢慢研究。以后會繼續寫出在使用中的心得給大家。
?
3、注意事項
a、jxl導出excel亂碼
在導出excel時,發現中文的標題亂碼,試了N種編碼方式,開始總是試圖轉為utf-8、gb2312、gbk,沒想到轉為iso-8859-1中文亂碼的問題解決了
總結
以上是生活随笔為你收集整理的jxl导入/导出excel(网上的案例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12.14-Linux系统优化
- 下一篇: amazeui学习笔记--css(常用组