應用java操作Excel文件的辦法。本站提示廣大學習愛好者:(應用java操作Excel文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是應用java操作Excel文件的辦法正文
良久以來都想研討一下應用java操作Excel的辦法,明天沒事,就略微懂得了一下,特總結一下。應用java操作Excel,有個開源的東東-jxl.jar,可以到http://sourceforge.net/projects/jexcelapi/files/下載。
一.讀取Excel文件內容
/** *//**讀取Excel文件的內容
* @param file 待讀取的文件
* @return
*/
public static String readExcel(File file)...{
StringBuffer sb = new StringBuffer();
Workbook wb = null;
try ...{
//結構Workbook(任務薄)對象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) ...{
e.printStackTrace();
} catch (IOException e) ...{
e.printStackTrace();
}
if(wb==null)
return null;
//取得了Workbook對象以後,便可以經由過程它獲得Sheet(任務表)對象了
Sheet[] sheet = wb.getSheets();
if(sheet!=null&&sheet.length>0)...{
//對每一個任務表停止輪回
for(int i=0;i<sheet.length;i++)...{
//獲得以後任務表的行數
int rowNum = sheet[i].getRows();
for(int j=0;j<rowNum;j++)...{
//獲得以後行的一切單位格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0)...{
//對每一個單位格停止輪回
for(int k=0;k<cells.length;k++)...{
//讀取以後單位格的值
String cellValue = cells[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//最初封閉資本,釋放內存
wb.close();
return sb.toString();
}
二.寫入Excel文件
這裡有許多格局了,好比文本內容加粗,加上某些色彩等,可以參考jxl的api
/**生成一個Excel文件
* @param fileName 要生成的Excel文件名
*/
public static void writeExcel(String fileName)...{
WritableWorkbook wwb = null;
try ...{
//起首要應用Workbook類的工場辦法創立一個可寫入的任務薄(Workbook)對象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) ...{
e.printStackTrace();
}
if(wwb!=null)...{
//創立一個可寫入的任務表
//Workbook的createSheet辦法有兩個參數,第一個是任務表的稱號,第二個是任務表在任務薄中的地位
WritableSheet ws = wwb.createSheet("sheet1", 0);
//上面開端添加單位格
for(int i=0;i<10;i++)...{
for(int j=0;j<5;j++)...{
//這裡須要留意的是,在Excel中,第一個參數表現列,第二個表現行
Label labelC = new Label(j, i, "這是第"+(i+1)+"行,第"+(j+1)+"列");
try ...{
//將生成的單位格添加到任務表中
ws.addCell(labelC);
} catch (RowsExceededException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
try ...{
//從內存中寫入文件中
wwb.write();
//封閉資本,釋放內存
wwb.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
}
}
注:假如想往一個曾經存在的Excel中寫入內容,則需依照以下方法停止:
WritableWorkbook book = null;
try...{
// Excel取得文件
Workbook wb = Workbook.getWorkbook(new File("D:/test.xls"));
// 翻開一個文件的正本,而且指定命據寫回到原文件
book = Workbook.createWorkbook(new File("D:/test.xls"), wb);
// 添加一個任務表
WritableSheet sheet = book.getSheet("sheet1");
sheet.addCell(new Label(8,3, "第3行第8列新增器械了"));
//TODO 以下部門省略
}catch(Exception e)...{
e.printStackTrace();
}
三.在一個Excel文件中查找能否包括某一個症結字
/**搜刮某一個文件中能否包括某個症結字
* @param file 待搜刮的文件
* @param keyWord 要搜刮的症結字
* @return
*/
public static boolean searchKeyWord(File file,String keyWord)...{
boolean res = false;
Workbook wb = null;
try ...{
//結構Workbook(任務薄)對象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) ...{
return res;
} catch (IOException e) ...{
return res;
}
if(wb==null)
return res;
//取得了Workbook對象以後,便可以經由過程它獲得Sheet(任務表)對象了
Sheet[] sheet = wb.getSheets();
boolean breakSheet = false;
if(sheet!=null&&sheet.length>0)...{
//對每一個任務表停止輪回
for(int i=0;i<sheet.length;i++)...{
if(breakSheet)
break;
//獲得以後任務表的行數
int rowNum = sheet[i].getRows();
boolean breakRow = false;
for(int j=0;j<rowNum;j++)...{
if(breakRow)
break;
//獲得以後行的一切單位格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0)...{
boolean breakCell = false;
//對每一個單位格停止輪回
for(int k=0;k<cells.length;k++)...{
if(breakCell)
break;
//讀取以後單位格的值
String cellValue = cells[k].getContents();
if(cellValue==null)
continue;
if(cellValue.contains(keyWord))...{
res = true;
breakCell = true;
breakRow = true;
breakSheet = true;
}
}
}
}
}
}
//最初封閉資本,釋放內存
wb.close();
return res;
}
四.往Excel中拔出圖片圖標
拔出圖片的完成很輕易,參看以下代碼:
/** *//**往Excel中拔出圖片
* @param dataSheet 待拔出的任務表
* @param col 圖片從該列開端
* @param row 圖片從該行開端
* @param width 圖片所占的列數
* @param height 圖片所占的行數
* @param imgFile 要拔出的圖片文件
*/
public static void insertImg(WritableSheet dataSheet, int col, int row, int width,
int height, File imgFile)...{
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
以上代碼的正文曾經很清晰了,年夜概也就不消再說明了,我們可以用以下法式驗證:
try ...{
//創立一個任務薄
WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//待拔出的任務表
WritableSheet imgSheet = workbook.createSheet("Images",0);
//要拔出的圖片文件
File imgFile = new File("D:/1.png");
//圖片拔出到第二行第一個單位格,長寬各占六個單位格
insertImg(imgSheet,0,1,6,6,imgFile);
workbook.write();
workbook.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}
然則jxl只支撐png格局的圖片,jpg格局和gif格局都不支撐
五.拔出頁眉頁腳
普通的頁眉頁腳都分為三個部門,左,中,右三部門,應用以下代碼可完成拔出頁眉頁腳
/** *//**向Excel中參加頁眉頁腳
* @param dataSheet 待參加頁眉的任務表
* @param left
* @param center
* @param right
*/
public static void setHeader(WritableSheet dataSheet,String left,String center,String right)...{
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(left);
hf.getCentre().append(center);
hf.getRight().append(right);
//參加頁眉
dataSheet.getSettings().setHeader(hf);
//參加頁腳
//dataSheet.getSettings().setFooter(hf);
}
我們可以用以下代碼測試該辦法:
try ...{
//創立一個任務薄
WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//待拔出的任務表
WritableSheet dataSheet = workbook.createSheet("參加頁眉",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1頁,共3頁");
workbook.write();
workbook.close();
} catch (IOException e) ...{
e.printStackTrace();
} catch (WriteException e) ...{
e.printStackTrace();
}