Java对xls文件进行读写操作示例代码
前言
本文主要给大家介绍的是关于Java对xls文件进行读写操作的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
- win7_x64
- IDEA
Java读写xls文件,使用库jxl.jar
读写xls文件,这里是在知道表格格式的前提下进行操作的。
目前无法操作xlsx文件
准备工作
将库jxl.jar添加到工程依赖中
Java代码示例
示例:从几个文件中读取数据并汇总到一个文件中
表格中的数据规定为:首行为标题,以下是数据和名称;例如
单位名金额 单位1948.34 单位24324 单位5324
准备好表格文件,放在指定目录下
示例过程大致为:在指定目录找到所有xls文件;遍历所有文件,读取出所有的单位名称;将单位名称排序;再遍历一次所有文件,将每个文件中单位对应的金额读出并存储;最后写到输出表格中。
finalStringwsFileDir="H:/OtherWorkDocs/ws";//原始数据存放的目录 finalStringresFilePath="H:/OtherWorkDocs/output/jan_feb_mar_sum.xls"; RWExcelrwExcel=newRWExcel();//操作xls的实例 //获取所有的名称并排序 TreeSetnameSet=rwExcel.getNameSet(wsFileDir); //将名称与下标存入map中 HashMap nameRowHashMap=rwExcel.getNameRowHashMap(nameSet); FilewsDir=newFile(wsFileDir);//源文件目录 File[]sourceFiles=wsDir.listFiles(); //存储单位名称与金额对应的数据 List >dataList=newArrayList<>(10); if(sourceFiles!=null){ for(FilesF:sourceFiles){ //装载数据 dataList.add(rwExcel.getSourceData(sF.getAbsolutePath())); } } //原始数据已经全部读出来,和名称一次性全部写入 rwExcel.writeAllToResFile(resFilePath,nameRowHashMap,dataList); //补充标题栏的标题 if(null!=sourceFiles){ intcol=1;//起始列的序号 for(Filef:sourceFiles){ StringfileName=f.getName(); Stringname=fileName.substring(0,fileName.length()-4); rwExcel.updateContent(resFilePath,name,0,col); col++; } }
Java代码
新建一个类RWExcel来操作xls文件。
publicclassRWExcel{ /** *存储名称 */ privateTreeSetnameTreeSet=newTreeSet<>(); /** *名称以及排列的下标号 */ privateHashMap nameRowMap=newHashMap<>(); publicTreeSet getNameSet(StringwsPath){ try{ FilewsDir=newFile(wsPath); if(wsDir.exists()&&wsDir.isDirectory()){ println("工作目录存在"); File[]files=wsDir.listFiles(); if(files!=null&&files.length>0){ for(FilecFile:files){ getNamesFromFile(cFile,this.nameTreeSet); } } } }catch(Exceptione){ e.printStackTrace(); } this.nameTreeSet.comparator(); returnthis.nameTreeSet; } /** *将名称Set排序后存入HashMap *下标从1开始 */ publicHashMap getNameRowHashMap(TreeSet nameSet){ nameSet.comparator(); intindex=1; for(Stringname:nameSet){ this.nameRowMap.put(name,index); index++; } returnthis.nameRowMap; } /** *所有数据存入表格 */ publicvoidwriteAllToResFile(StringresFilePath,Map nameMap,List >dataList){ FileresFile=newFile(resFilePath); if(!resFile.exists()){ try{ resFile.createNewFile(); }catch(IOExceptione){ e.printStackTrace(); } } if(resFile.exists()){ try{ //先写名称 WritableWorkbookwwb=Workbook.createWorkbook(resFile); WritableSheetws=wwb.createSheet("sum",0); Labellabel=newLabel(0,0,"单位名称"); ws.addCell(label); for(Map.Entry entry:nameMap.entrySet()){ LabelnameLabel=newLabel(0,entry.getValue(),entry.getKey()); ws.addCell(nameLabel); for(intj=0;j dataMap=dataList.get(dataColumn); //遍历这个map将所有的数据对应填入 for(Map.Entry dataEntry:dataMap.entrySet()){ introw=nameRowMap.get(dataEntry.getKey()); NumbernumberCell=newNumber(dataColumn+1,row,dataEntry.getValue()); ws.addCell(numberCell); } } wwb.write(); wwb.close(); }catch(Exceptione){ e.printStackTrace(); } } } privatevoidgetNamesFromFile(FileinputFile,TreeSet hashSet)throwsIOException,BiffException{ Workbookworkbook; InputStreamis=newFileInputStream(inputFile); workbook=Workbook.getWorkbook(is); Sheetsheet0=workbook.getSheet(0); intcolumnSum=sheet0.getColumns();//总列数 intrsRows=sheet0.getRows();//总行数 //从1下标开始 for(inti=1;i getSourceData(Stringsource){ FilesFile=newFile(source); if(!sFile.exists()){ System.out.println("原始文件不存在复制失败!"); returnnull; } //读取源文件中的所有数据<单位名称,数值> HashMap sourceHashMap=newHashMap<>(); try{ WorkbooksourceWs=Workbook.getWorkbook(sFile); SheetsSheet0=sourceWs.getSheet(0); intsTotalRows=sSheet0.getRows();//总行数 for(inti=1;i 示例运行结果
得到以下结果(示例)
单位名称1月总金额2月总金额3月总金额 单位1059.29999924948.3400269 单位1000494.2000122 单位110011.19999981 单位12001.25 单位1549.3600006100 单位2004324 单位240340 单位5023123324 单位60161.25999450总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。