Java 使用jxl對Excel進行操作
一個作業需要對excel資料進行離散化,想起好像可以用java對excel資料進行處理,因此學習使用,
在網上也有很多人對這個內容解釋,但是還是覺得有些雜,就自己整理了一些別人寫的內容。
/************************************************正文啦*****************************************************/
在處理excel資料時候有兩種方式:
jxl:一種是首先依據excel中的資料建立一個相應的實體類,將每一條資料視為一個物件,然後將對excel中的資料處理轉成對物件的處理。
(支援.xls檔案,excel2003版,好像最最新的jxl.jar可以支援2007版excel)
poi
注:由於我自己寫的是用jxl,所以主要講jxl的使用
jxl.jar是通過java操作excel表格的工具類庫;
下載地址:百度網盤連結:https://pan.baidu.com/s/1ceIT6oDRDGFott7b7u0Jgw 提取碼:ed57
搭建環境
將下載後的檔案解包,得到JXL.JAR,放入classpath,安裝就完成了。如果包不能正常的載入,可以把你下載好的JXL.JAR包放入D:/JAVA/jre/lib/ext中
如果想在
/******************************************************************************************************/
jxl.jar完美體現了面向物件的思想.簡單列舉幾個常用類和介面
Workbook--對應一個excel檔案
Sheet--對應一個sheet工作簿
Cell--對應一個cell單元格
/************************************建立一個檔案***************************************************/
擬生成一個名為 “測試資料.xls”的Excel檔案,其中第一個工作表被命名為“第一頁”,大致效果如下
package test; import java.io.*; import jxl.*; import jxl.write.*; public class ExcelOperater { public static void main(String args[]){ try{ //開啟檔案 WritableWorkbook book= Workbook.createWorkbook(new File("測試.xls")); //生成名為“第一頁”的工作表,引數0表示這是第一頁 WritableSheet sheet=book.createSheet("第一頁",0); //在Label物件的構造子中指名單元格位置是第一列第一行(0,0) //以及單元格內容為test Label label=new Label(0,0,"test"); //將定義好的單元格新增到工作表中 sheet.addCell(label); /*生成一個儲存數字的單元格 必須使用Number的完整包路徑,否則有語法歧義 單元格位置是第二列,第一行,值為789.123*/ jxl.write.Number number = new jxl.write.Number(1,0,789.123); sheet.addCell(number); //寫入資料並關閉檔案 book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } }
結果如圖:
/*******************************************************讀取檔案*************************************************************/
package test; import java.io.*; import jxl.*; public class ReadXls{ public static void main(String args[]){ try{ Workbook book=Workbook.getWorkbook(new File("測試.xls")); //獲得第一個工作表物件 Sheet sheet=book.getSheet(0); //得到第一列第一行的單元格 Cell cell1=sheet.getCell(0,0); String result=cell1.getContents(); System.out.println(result); book.close(); }catch(Exception e) { System.out.println(e); } } }
結果如圖:
/*****************************************************在已經生成的Excel檔案中新增一個工作表***********************************************/
package test; import java.io.*; import jxl.*; import jxl.write.*; public class ModifyXls{ public static void main(String args[]){ try{ //Excel獲得檔案 Workbook wb=Workbook.getWorkbook(new File("測試.xls")); //開啟一個檔案的副本,並且指定資料寫回到原檔案 WritableWorkbook book=Workbook.createWorkbook(new File("測試.xls"),wb); //新增一個工作表 WritableSheet sheet=book.createSheet("第二頁",1); sheet.addCell(new Label(0,5,"第二頁的測試資料")); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } }
結果如圖:
/********************************************************************修改檔案內容**********************************************/
package Shopping; import java.io.File; import java.io.FileInputStream; import jxl.Cell; import jxl.CellType; import jxl.NumberCell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCell; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class test{ public static void main(String args[]){{ try{ //找到要修改的表 FileInputStream is = new FileInputStream("購物籃資料.xls"); Workbook wb=Workbook.getWorkbook(is); Sheet st =wb.getSheet(0);//獲取第一張sheet表 int stColumns = st.getColumns();//獲取sheet表中所包含的的總列數 int stRows = st.getRows();//獲取sheet表總所包含的總行數 //新建要寫入資料的表,並指定路徑 // jxl.Workbook 物件是隻讀的,所以如果要修改Excel,需要建立一個可寫的副本,副本指向原Excel檔案 WritableWorkbook wbook = Workbook.createWorkbook(new File("副本.xls"),wb); WritableSheet wSheet = wbook.getSheet(0); WritableCell wCell = null; //處理birth——year for(int i=1; i<stRows; i++){ wCell = wSheet.getWritableCell(8,i); int cell8 = (int)((NumberCell)wSheet.getCell(8,i)).getValue(); Label replace = null; if(cell8<1980){ replace = new Label(8,i,"老人家");//輸入內容【列,行,值】 } else if(cell8<1985){ replace = new Label(8,i,"80後"); } else if(cell8<1990){ replace = new Label(8,i,"85後"); } else if(cell8<1995){ replace = new Label(8,i,"90後"); } else if(cell8<2000){ replace = new Label(8,i,"95後"); } else{ replace = new Label(8,i,"00後"); } wSheet.addCell(replace); wCell = wSheet.getWritableCell(8, i); } wbook.write(); wbook.close(); }catch(Exception e) { System.out.println(e); } } } }
上面的內容前三個是從別人的程式碼裡摘過來的。初學比較容易理解,第三個就是我自己的作業了。
我的資料可以下載:連結:https://pan.baidu.com/s/1iX3Sr0Vppqn4bvhKBsbG0w 提取碼:jdog
有些內容我寫的不是很詳細,推薦一下我當時看的內容和poi的講解
1:https://www.aliyun.com/jiaocheng/251324.html
2:https://blog.csdn.net/hjiacheng/article/details/53573679
3:https://blog.csdn.net/qq_30401659/article/details/50974575
4:https://www.cnblogs.com/mingforyou/p/3282922.html
如果有什麼錯的地方,請提醒我改正,謝謝!