Jexcel实现按一定规则分割excel文件的方法
本文实例讲述了Jexcel实现按一定规则分割excel文件的方法。分享给大家供大家参考。具体如下:
现有一个excel文档,需要读取它并按照一定的规则,分割之,分割出来的每一段记录需要单独创建一个excel文档并写入其中,一定要保证单元格格式的一致性。
packageedu.bjut.zhutong.excelParser; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.IOException; importjava.io.InputStream; importjxl.Cell; importjxl.CellType; importjxl.Sheet; importjxl.Workbook; importjxl.format.Alignment; importjxl.format.Border; importjxl.format.BorderLineStyle; importjxl.format.Colour; importjxl.format.VerticalAlignment; importjxl.read.biff.BiffException; importjxl.write.Label; importjxl.write.WritableCellFormat; importjxl.write.WritableFont; importjxl.write.WritableSheet; importjxl.write.WritableWorkbook; importjxl.write.WriteException; importjxl.write.biff.RowsExceededException; publicclassExcelParser{ publicstaticvoidmain(String[]args){ Workbookwb=null; try{ //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 InputStreamis=newFileInputStream("C:/excel/excel.xls"); wb=Workbook.getWorkbook(is); //获得第一个工作表对象 Sheetsheet=wb.getSheet(0); //获得工作表的行数和列数 introws=sheet.getRows(); intcols=sheet.getColumns(); System.out.println("一共"+rows+"行"); System.out.println("一共"+cols+"列"); intcounter=0;//工作表行游标 intfileCounts=1;//用来标识创建的excel文档数目 while(counter<rows-1){ //得到counter行的所有单元格 Cell[]rowCells=sheet.getRow(counter); Cellcell0=rowCells[0]; //判断单元格内容的类型 if(cell0.getType()==CellType.LABEL){ System.out.println("正在解析第"+fileCounts+"个文件...."); //新建一个excel文档 Filefile=newFile("C:/excel/excel"+fileCounts+".xls"); WritableWorkbookwwb=Workbook.createWorkbook(file); //设置excel文档的工作表 WritableSheetws=wwb.createSheet("sheet1",0); //第一行合并第0到第8列 ws.mergeCells(0,0,8,0); //设置第7,8,9列的列宽 ws.setColumnView(6,10); ws.setColumnView(7,45); ws.setColumnView(8,27); //向新建的表中写入数据,首先第一行先写入标题 for(intk=0;k<rowCells.length;k++){ //创建WritableFont对象用来格式化字体,这里是20号宋体,加粗 WritableFontwf=newWritableFont(WritableFont.createFont("宋体"),20,WritableFont.BOLD,false); //使用WritableFont创建单元格格式化对象 WritableCellFormatwcf=newWritableCellFormat(wf); //设置水平对齐方式 wcf.setAlignment(Alignment.CENTRE); //设置垂直对齐方式 wcf.setVerticalAlignment(VerticalAlignment.CENTRE); //设置边框和颜色 wcf.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK); Cellcell=rowCells[k]; Labellabel=newLabel(k,0,cell.getContents(),wcf); //添加单元格到表中 ws.addCell(label); //设置第一行的行高 ws.setRowView(0,30*20,false); } //向新建的表中写入数据,第二行写入表头 for(intc=0;c<cols;c++){ StringcolCon=sheet.getCell(c,1).getContents(); WritableFontwf=newWritableFont(WritableFont.createFont("宋体"),12,WritableFont.BOLD,false); WritableCellFormatwcf=newWritableCellFormat(wf); wcf.setAlignment(Alignment.CENTRE); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK); ws.addCell(newLabel(c,1,colCon,wcf)); ws.setRowView(1,18*20,false); } introwCounts=1;//用来遍历50 counter++;//将游标移动到下一行 if(counter==1)//如果游标到了第二行,就自动把游标移动到第三行,第二行不需要处理 counter=2; introwIndex=2;//每篇excel文档的游标 rowCells=sheet.getRow(counter); cell0=rowCells[0]; while(cell0.getType()==CellType.NUMBER&&counter<rows-1){ rowCells=sheet.getRow(counter); for(intk=0;k<rowCells.length;k++){ WritableFontwf=newWritableFont(WritableFont.createFont("宋体"),12,WritableFont.NO_BOLD,false); WritableCellFormatwcf=newWritableCellFormat(wf); wcf.setAlignment(Alignment.CENTRE); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK); Labellabel=newLabel(k,rowIndex,rowCells[k].getContents(),wcf); ws.addCell(label); } //用来处理备注列的边框 { WritableFontwf=newWritableFont(WritableFont.createFont("宋体"),12,WritableFont.NO_BOLD,false); WritableCellFormatwcf=newWritableCellFormat(wf); wcf.setAlignment(Alignment.CENTRE); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK); Labellabel=newLabel(8,rowIndex,"",wcf); ws.addCell(label); } ws.setRowView(rowIndex,18*20,false); rowIndex++; counter++; cell0=sheet.getRow(counter)[0]; } wwb.write(); wwb.close(); fileCounts++; } } System.out.println("程序执行结束...."); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(BiffExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }catch(RowsExceededExceptione){ e.printStackTrace(); }catch(WriteExceptione){ e.printStackTrace(); }finally{ wb.close();//关闭Workbook对象 } } }
希望本文所述对大家的java程序设计有所帮助。