java解析并且操作excel 方法.docx
《java解析并且操作excel 方法.docx》由会员分享,可在线阅读,更多相关《java解析并且操作excel 方法.docx(44页珍藏版)》请在冰点文库上搜索。
java解析并且操作excel方法
java解析并且操作excel方法
最近需求变化,需要把excel导入我以前没有做过,所以我查了一些资料和参考别人的代码
以下是多种方式:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importjxl.Workbook;
importjxl.format.UnderlineStyle;
importjxl.write.Label;
importjxl.write.WritableFont;
importjxl.write.WritableSheet;
importjxl.write.WritableWorkbook;
importjxl.write.WriteException;
importjxl.write.biff.RowsExceededException;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFCellStyle;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.poifs.filesystem.POIFSFileSystem;
publicclassExcelOpt{
/**
*生成一个Excel文件jxl
*@paramfileName要生成的Excel文件名
*@jxl.jar版本:
2.6
*/
publicstaticvoidwriteExcel(StringfileName){
WritableWorkbookwwb=null;
try{
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb=Workbook.createWorkbook(newFile(fileName));
}catch(IOExceptione){
e.printStackTrace();
}
if(wwb!
=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheetws=wwb.createSheet("工作表名称",0);
//下面开始添加单元格
for(inti=0;i<10;i++){
for(intj=0;j<5;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
LabellabelC=newLabel(j,i,"这是第"+(i+1)+"行,第"+(j+1)+"列");
try{
//将生成的单元格添加到工作表中
ws.addCell(labelC);
}catch(RowsExceededExceptione){
e.printStackTrace();
}catch(WriteExceptione){
e.printStackTrace();
}
}
}
try{
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
}catch(IOExceptione){
e.printStackTrace();
}catch(WriteExceptione){
e.printStackTrace();
}
}
}
/**
*生成一个Excel文件POI
*@paraminputFile输入模板文件路径
*@paramoutputFile输入文件存放于服务器路径
*@paramdataList待导出数据
*@throwsException
*@roseuid:
*/
publicstaticvoidexportExcelFile(StringinputFile,StringoutputFile,ListdataList)throwsException{
//用模板文件构造poi
POIFSFileSystemfs=newPOIFSFileSystem(newFileInputStream(inputFile));
//创建模板工作表
HSSFWorkbooktemplatewb=newHSSFWorkbook(fs);
//直接取模板第一个sheet对象
HSSFSheettemplateSheet=templatewb.getSheetAt
(1);
//得到模板的第一个sheet的第一行对象为了得到模板样式
HSSFRowtemplateRow=templateSheet.getRow(0);
//HSSFSheettimplateSheet=templatewb.getSheetAt
(1);
//取得Excel文件的总列数
intcolumns=templateSheet.getRow((short)0)
.getPhysicalNumberOfCells();
//Debug.println("columnsis:
"+columns);//=========================
//创建样式数组
HSSFCellStylestyleArray[]=newHSSFCellStyle[columns];
//一次性创建所有列的样式放在数组里
for(ints=0;s//得到数组实例
styleArray[s]=templatewb.createCellStyle();
}
//循环对每一个单元格进行赋值
//定位行
for(introwId=1;rowId//依次取第rowId行数据每一个数据是valueList
ListvalueList=(List)dataList.get(rowId-1);
//定位列
for(intcolumnId=0;columnId//依次取出对应与colunmId列的值
//每一个单元格的值
StringdataValue=(String)valueList.get(columnId);
//取出colunmId列的的style
//模板每一列的样式
HSSFCellStylestyle=styleArray[columnId];
//取模板第colunmId列的单元格对象
//模板单元格对象
HSSFCelltemplateCell=templateRow.getCell((short)columnId);
//创建一个新的rowId行行对象
//新建的行对象
HSSFRowhssfRow=templateSheet.createRow(rowId);
//创建新的rowId行columnId列单元格对象
//新建的单元格对象
HSSFCellcell=hssfRow.createCell((short)columnId);
//如果对应的模板单元格样式为非锁定
if(templateCell.getCellStyle().getLocked()==false){
//设置此列style为非锁定
style.setLocked(false);
//设置到新的单元格上
cell.setCellStyle(style);
}
//否则样式为锁定
else{
//设置此列style为锁定
style.setLocked(true);
//设置到新单元格上
cell.setCellStyle(style);
}
//设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//Debug.println("dataValue:
"+dataValue);
//设置值统一为String
cell.setCellValue(dataValue);
}
}
//设置输入流
FileOutputStreamfOut=newFileOutputStream(outputFile);
//将模板的内容写到输出文件上
templatewb.write(fOut);
fOut.flush();
//操作结束,关闭文件
fOut.close();
}
/**
*导出数据为XLS格式
*@paramfos生成Excel文件Path
*@parambo要导入的数据
*/
publicstaticvoidwriteExcelBo(Stringfos,java.util.Listve)
{
jxl.write.WritableWorkbookwwb;
try
{
wwb=Workbook.createWorkbook(newFile(fos));
jxl.write.WritableSheetws=wwb.createSheet("上市新书",10);
ws.addCell(newjxl.write.Label(0,1,"书名"));
ws.addCell(newjxl.write.Label(1,1,"作者"));
ws.addCell(newjxl.write.Label(2,1,"定价"));
ws.addCell(newjxl.write.Label(3,1,"出版社"));
intbookSize=ve.size();
BookVObook=newBookVO();
for(inti=0;i{
book=(BookVO)ve.get(i);
ws.addCell(newjxl.write.Label(0,i+2,""+book.getBookName()));
ws.addCell(newjxl.write.Label(1,i+2,book.getBookAuthor()));
ws.addCell(newjxl.write.Label(2,i+2,""+book.getBookPrice()));
ws.addCell(newjxl.write.Label(3,i+2,book.getBookConcern()));
}
//jxl.write.WritableFontwfc=
//newjxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
//jxl.write.WritableCellFormatwcfFC=newjxl.write.WritableCellFormat(wfc);
ws.addCell(newjxl.write.Label(0,0,"2007年07月即将上市新书!
"));
wwb.write();
//关闭Excel工作薄对象
wwb.close();
}catch(IOExceptione){
}catch(RowsExceededExceptione){
}catch(WriteExceptione){
}
}
publicstaticvoidmain(String[]args){
writeExcel("c:
\\Test测试Excel.xls");
System.out.println("OK");
ArrayListlist=newArrayList();
for(inti=0;i<10;i++){
BookVObook=newBookVO();
book.setBookName("WebWorkinaction+"+i);
book.setBookAuthor("唐勇+"+i);
book.setBookPrice("39元+"+i);
book.setBookConcern("飞思科技+"+i);
list.add(book);
}
writeExcelBo("c:
\\上市新书.xls",list);
System.err.println("BookOK!
!
!
");
}
}
=================摘要=====================
java如何操作Excel(数据导入导出)(转)
jxl.jar,可以到
一.读取Excel文件内容
java代码
/**读取Excel文件的内容
*@paramfile待读取的文件
*@return
*/
publicstaticStringreadExcel(Filefile){
StringBuffersb=newStringBuffer();
Workbookwb=null;
try{
//构造Workbook(工作薄)对象
wb=Workbook.getWorkbook(file);
}catch(BiffExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
if(wb==null)
returnnull;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[]sheet=wb.getSheets();
if(sheet!
=null&&sheet.length>0){
//对每个工作表进行循环
for(inti=0;i
//得到当前工作表的行数
introwNum=sheet[i].getRows();
for(intj=0;j
//得到当前行的所有单元格
Cell[]cells=sheet[i].getRow(j);
if(cells!
=null&&cells.length>0){
//对每个单元格进行循环
for(intk=0;k
//读取当前单元格的值
StringcellValue=cells[k].getContents();
sb.append(cellValue+"\t");
}
}
sb.append("\r\n");
}
sb.append("\r\n");
}
}
//最后关闭资源,释放内存
wb.close();
returnsb.toString();
}
二.写入Excel文件
这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api.
同时还推荐一篇不错的文章:
java代码
/**生成一个Excel文件
*@paramfileName要生成的Excel文件名
*/
publicstaticvoidwriteExcel(StringfileName){
WritableWorkbookwwb=null;
try{
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb=Workbook.createWorkbook(newFile(fileName));
}catch(IOExceptione){
e.printStackTrace();
}
if(wwb!
=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheetws=wwb.createSheet("sheet1",0);
//下面开始添加单元格
for(inti=0;i<10;i++){
for(intj=0;j<5;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
LabellabelC=newLabel(j,i,"这是第"+(i+1)+"行,第"+(j+1)+"列");
try{
//将生成的单元格添加到工作表中
ws.addCell(labelC);
}catch(RowsExceededExceptione){
e.printStackTrace();
}catch(WriteExceptione){
e.printStackTrace();
}
}
}
try{
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
}catch(IOExceptione){
e.printStackTrace();
}catch(WriteExceptione){
e.printStackTrace();
}
}
}
三.在一个Excel文件中查找是否包含某一个关键字
java代码
/**搜索某一个文件中是否包含某个关键字
*@paramfile待搜索的文件
*@paramkeyWord要搜索的关键字
*@return
*/
publicstaticbooleansearchKeyWord(Filefile,StringkeyWord){
booleanres=false;
Workbookwb=null;
try{
//构造Workbook(工作薄)对象
wb=Workbook.getWorkbook(file);
}catch(BiffExceptione){
returnres;
}catch(IOExceptione){
returnres;
}
if(wb==null)
returnres;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[]sheet=wb.getSheets();
booleanbreakSheet=false;
if(sheet!
=null&&sheet.length>0){
//对每个工作表进行循环
for(inti=0;i
if(breakSheet)
break;
//得到当前工作表的行数
introwNum=sheet[i].getRows();
booleanbreakRow=false;
for(intj=0;j
if(breakRow)
break;
//得到当前行的所有单元格
Cell[]cells=sheet[i].getRow(j);
if(cells!
=null&&cells.length>0){
booleanbreakCell=false;
//对每个单元格进行循环
for(intk=0;k
if(breakCell)
break;
//读取当前单元格的值
StringcellValue=cells[k].getContents();
if(cellValue==null)
continue;
if(cellValue.contains(keyWord)){
res=true;
breakCell=true;
breakRow=true;
breakSheet=true;
}
}
}
}
}
}
//最后关闭资源,释放内存
wb.close();
returnres;
}
四.往Excel中插入图片图标
插入图片的实现很容易,参看以下代码:
java代码
/**往Excel中插入图片
*@paramdataSheet待插入的工作表
*@paramcol图片从该列开始
*@paramrow图片从该行开始
*@paramwidth图片所占的列数
*@paramheight图片所占的行数
*@paramimgFile要插入的图片文件
*/
publicstaticvoidinsertImg(WritableSheetdataSheet,intcol,introw,intwidth,
intheight,FileimgFile){
WritableImageimg=newWritableImage(col,row,width,height,imgFile);
dataSheet.addImage(img);
}
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:
java代码
try{
//创建一个工作薄
WritableWorkbookworkbook=Workbook.createWorkbook(newFile("D:
/test1.xls"));
//待插入的工作表
WritableSheetimgSheet=workbook.createSheet("Images",0);
//要插入的图片文件
FileimgFile=newFile("D:
/1.png");
//图片插入到第二行第一个单元格,长宽各占六个单元格
ins