一个作业需要对excel数据进行离散化,想起好像可以用java对excel数据进行处理,因此学习使用,
在网上也有很多人对这个内容解释,但是还是觉得有些杂,就自己整理了一些别人写的内容。
/************************************************正文啦*****************************************************/
在处理excel数据时候有两种方式:
jxl:一种是首先依据excel中的数据创建一个相应的实体类,将每一条数据视为一个对象,然后将对excel中的数据处理转成对对象的处理。
(支持.xls文件,excel2003版,好像最最新的jxl.jar可以支持2007版excel)
poi:一种是将每一条数据视为一个集合或者数组,然后再将整个数据视为一个整体。(支持excel.xls和excel.xlsx, 还支持word文件)
注:由于我自己写的是用jxl,所以主要讲jxl的使用
jxl.jar是通过java操作excel表格的工具类库;
下载地址:百度网盘链接:https://pan.baidu.com/s/1ceIT6oDRDGFott7b7u0Jgw 提取码:ed57
搭建环境
将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:/JAVA/jre/lib/ext中
如果想在Eclipse的一个项目中导入JXL.JAR,在该项目上右键,点击“属性”, 类别那里选择”库“,点击"添加外部jar”在弹出的文件选择对话框选择你的jxl.jar
/******************************************************************************************************/
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
如果有什么错的地方,请提醒我改正,谢谢!