Java操作Excel檔案

iteye_9089發表於2017-05-02
利用java操作Excel檔案
很久以來都想研究一下利用java操作Excel的方法,今天沒事,就稍微瞭解了一下,特總結一下。利用java操作Excel,有個開源的東東-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下載。

一.讀取Excel檔案內容

java 程式碼
/**讀取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
//得到當前工作表的行數
int rowNum = sheet[i].getRows();
for(int j=0;j
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0){
//對每個單元格進行迴圈
for(int k=0;k
//讀取當前單元格的值
String cellValue = cells[k].getContents();
sb.append(cellValue+"\t");
}
}
sb.append("\r\n");
}
sb.append("\r\n");
}
}
//最後關閉資源,釋放記憶體
wb.close();
return sb.toString();
}

二.寫入Excel檔案

這裡有很多格式了,比如文字內容加粗,加上某些顏色等,可以參考jxl的api,同時還推薦一篇不錯的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10

java 程式碼
/**生成一個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檔案中查詢是否包含某一個關鍵字

java 程式碼
/**搜尋某一個檔案中是否包含某個關鍵字
* @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
if(breakSheet)
break;

//得到當前工作表的行數
int rowNum = sheet[i].getRows();

boolean breakRow = false;

for(int j=0;j
if(breakRow)
break;
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0){
boolean breakCell = false;
//對每個單元格進行迴圈
for(int k=0;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中插入圖片圖示

插入圖片的實現很容易,參看以下程式碼:

java 程式碼
/**往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);
}
以上程式碼的註釋已經很清楚了,大概也就不用再解釋了,我們可以用如下程式驗證:

java 程式碼
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格式都不支援

五.插入頁首頁尾

一般的頁首頁尾都分為三個部分,左,中,右三部分,利用如下程式碼可實現插入頁首頁尾

java 程式碼
/**向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);
}
我們可以用如下程式碼測試該方法:

java 程式碼
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();
}
}

相關文章