本文主要给大家介绍的是关于Java对xls文件进行读写操作的相关内容,分享出来供大家参考学习、下面话不多说了,来一起看看详细的介绍:
-
<李> win7_x64李>
<李>想法李>
读写xls文件,这里是在知道表格格式的前提下进行操作的。
目前无法操作xlsx文件
将库jxl.jar添加到工程依赖中
<强>示例:从几个文件中读取数据并汇总到一个文件中强>
表格中的数据规定为:首行为标题,以下是数据和名称,例如
单位名金额 948.34单位1 单位4324 单位324
准备好表格文件,放在指定目录下
示例过程大致为:在指定目录找到所有xls文件,遍历所有文件,读取出所有的单位名称,将单位名称排序,再遍历一次所有文件,将每个文件中单位对应的金额读出并存储;最后写到输出表格中。
最终字符串wsFileDir=癏:/OtherWorkDocs/ws”;//原始数据存放的目录 最终字符串resFilePath=" H:/OtherWorkDocs/输出/jan_feb_mar_sum.xls”; RWExcel RWExcel=new RWExcel ();//操作xls的实例//获取所有的名称并排序 TreeSetnameSet=rwExcel.getNameSet (wsFileDir);//将名称与下标存入地图中 Integer> HashMap<字符串;nameRowHashMap=rwExcel.getNameRowHashMap (nameSet); 文件wsDir=新文件(wsFileDir);//源文件目录 文件[]源文件=wsDir.listFiles ();//存储单位名称与金额对应的数据 List 比;dataList=new ArrayList<比;(10); 如果(源文件!=null) { (文件科幻:源文件){//装载数据 dataList.add (rwExcel.getSourceData (sF.getAbsolutePath ())); } }//原始数据已经全部读出来,和名称一次性全部写入 rwExcel。writeAllToResFile (resFilePath nameRowHashMap dataList);//补充标题栏的标题 如果(零!=源文件){ int坳=1;//起始列的序号 (文件f:源文件){ 字符串文件名=f.getName (); 字符串名称=文件名。substring (0, fileName.length ()——4); rwExcel。updateContent (resFilePath,名字,0,坳); 坳+ +; } }
<强> Java代码强>
新建一个类RWExcel来操作xls文件。
公开课RWExcel {/* * *存储名称 */私人TreeSet,nameTreeSet=new TreeSet<的在();/* * *名称以及排列的下标号 */私人HashMap<字符串,Integer>,nameRowMap=new HashMap<的在(); 公共TreeSet getNameSet(字符串wsPath) { 尝试{ 文件wsDir=新文件(wsPath); 如果(wsDir.exists (),,wsDir.isDirectory ()) { println(“工作目录存在”); 文件[]文件=wsDir.listFiles (); 如果文件!=零,,文件。长度比;0){ (文件用文件){ getNamesFromFile(用this.nameTreeSet); } } } }捕捉(异常e) { e.printStackTrace (); } this.nameTreeSet.comparator (); 返回this.nameTreeSet; }/* * *将名称设置排序后存入HashMap *下标从1开始 */公共HashMap<字符串,Integer>getNameRowHashMap (TreeSet nameSet) { nameSet.comparator (); int指数=1; (字符串名称:nameSet) { this.nameRowMap.put(名称、指标); 指数+ +; } 返回this.nameRowMap; }/* * *所有数据存入表格 */公共空间writeAllToResFile (String resFilePath Map<字符串,Integer>nameMap List 比;dataList) { 文件resFile=新文件(resFilePath); 如果(! resFile.exists ()) { 尝试{ resFile.createNewFile (); }捕捉(IOException e) { e.printStackTrace (); } } 如果(resFile.exists ()) { 尝试{//先写名称 WritableWorkbook wwb=Workbook.createWorkbook (resFile); WritableSheet ws=wwb。createSheet("和",0); 标签标签=新标签(0,0,“单位名称”); ws.addCell(标签); (Map.Entry<字符串,Integer>条目:nameMap.entrySet ()) { 标签nameLabel=新标签(0,entry.getValue (), entry.getKey ()); ws.addCell (nameLabel); for (int j=0;j & lt;dataList.size ();j + +) { zeroCell数量=新号码(j + 1, entry.getValue (), 0); ws.addCell (zeroCell); } } for (int上=0;上& lt;dataList.size ();上+ +){ Float> HashMap<字符串;dataMap=dataList.get(上);//遍历这个地图将所有的数据对应填入 (Map.Entry<字符串,Float>dataEntry: dataMap.entrySet ()) { int行=nameRowMap.get (dataEntry.getKey ()); numberCell数量=新号码(上+ 1,行,dataEntry.getValue ()); ws.addCell (numberCell); } } wwb.write (); wwb.close (); }捕捉(异常e) { e.printStackTrace (); } } } 私人空间getNamesFromFile(文件inputFile TreeSet Java对xls文件进行读写操作示例代码