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程序设计有所帮助。