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<>();
/**
*名称以及排列的下标号
*/
privateHashMapnameRowMap=newHashMap<>();
publicTreeSetgetNameSet(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开始
*/
publicHashMapgetNameRowHashMap(TreeSetnameSet){
nameSet.comparator();
intindex=1;
for(Stringname:nameSet){
this.nameRowMap.put(name,index);
index++;
}
returnthis.nameRowMap;
}
/**
*所有数据存入表格
*/
publicvoidwriteAllToResFile(StringresFilePath,MapnameMap,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.Entryentry:nameMap.entrySet()){
LabelnameLabel=newLabel(0,entry.getValue(),entry.getKey());
ws.addCell(nameLabel);
for(intj=0;jdataMap=dataList.get(dataColumn);
//遍历这个map将所有的数据对应填入
for(Map.EntrydataEntry: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,TreeSethashSet)throwsIOException,BiffException{
Workbookworkbook;
InputStreamis=newFileInputStream(inputFile);
workbook=Workbook.getWorkbook(is);
Sheetsheet0=workbook.getSheet(0);
intcolumnSum=sheet0.getColumns();//总列数
intrsRows=sheet0.getRows();//总行数
//从1下标开始
for(inti=1;igetSourceData(Stringsource){
FilesFile=newFile(source);
if(!sFile.exists()){
System.out.println("原始文件不存在复制失败!");
returnnull;
}
//读取源文件中的所有数据<单位名称,数值>
HashMapsourceHashMap=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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。