Java Excel是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。
?
?? 今天突然翻到了以前的一個測試,好像也是從哪里拷貝修改改過的,注釋里有個IBM的鏈接 http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10,貼上來當作一個入門參考資料吧。
?
- import ?java.io.File; ??
- import ?java.io.IOException; ??
- ??
- import ?jxl.Cell; ??
- import ?jxl.HeaderFooter; ??
- import ?jxl.Sheet; ??
- import ?jxl.Workbook; ??
- import ?jxl.format.VerticalAlignment; ??
- import ?jxl.read.biff.BiffException; ??
- import ?jxl.write.Label; ??
- import ?jxl.write.WritableCellFormat; ??
- import ?jxl.write.WritableImage; ??
- import ?jxl.write.WritableSheet; ??
- import ?jxl.write.WritableWorkbook; ??
- import ?jxl.write.WriteException; ??
- import ?jxl.write.biff.RowsExceededException; ??
- ??
- /** ?
- ?*?@author?cjj?2008-12-22?參考: ?
- ?*?????????http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10 ?
- ?*? ?
- ?*? ?
- ?*/ ??
- public ? class ?ExcelUtils ??
- { ??
- ???? /** ?
- ?????*?讀取Excel文件的內容 ?
- ?????*? ?
- ?????*?@param?file ?
- ?????*????????????待讀取的文件 ?
- ?????*?@return ?
- ?????*/ ??
- ???? public ? static ?String?readExcel( final ?File?file) ??
- ????{ ??
- ???????? final ?StringBuffer?sb?=? new ?StringBuffer(); ??
- ??
- ????????Workbook?wb?=? null ; ??
- ???????? try ??
- ????????{ ??
- ???????????? //構造Workbook(工作薄)對象??? ??
- ????????????wb?=?Workbook.getWorkbook(file); ??
- ????????} ??
- ???????? catch ?( final ?BiffException?e) ??
- ????????{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ???????? catch ?( final ?IOException?e) ??
- ????????{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ??
- ???????? if ?(wb?==? null )? return ? null ; ??
- ??
- ???????? //獲得了Workbook對象之后,就可以通過它得到Sheet(工作表)對象了??? ??
- ???????? final ?Sheet[]?sheet?=?wb.getSheets(); ??
- ??
- ???????? if ?(sheet?!=? null ?&&?sheet.length?>? 0 ) ??
- ????????{ ??
- ???????????? //對每個工作表進行循環??? ??
- ???????????? for ?( int ?i?=? 0 ;?i?<?sheet.length;?i++) ??
- ????????????{ ??
- ???????????????? //得到當前工作表的行數??? ??
- ???????????????? final ? int ?rowNum?=?sheet[i].getRows(); ??
- ???????????????? for ?( int ?j?=? 0 ;?j?<?rowNum;?j++) ??
- ????????????????{ ??
- ???????????????????? //得到當前行的所有單元格??? ??
- ???????????????????? final ?Cell[]?cells?=?sheet[i].getRow(j); ??
- ???????????????????? if ?(cells?!=? null ?&&?cells.length?>? 0 ) ??
- ????????????????????{ ??
- ???????????????????????? //對每個單元格進行循環??? ??
- ???????????????????????? for ?( int ?k?=? 0 ;?k?<?cells.length;?k++) ??
- ????????????????????????{ ??
- ???????????????????????????? //讀取當前單元格的值??? ??
- ???????????????????????????? final ?String?cellValue?=?cells[k].getContents(); ??
- ????????????????????????????sb.append(cellValue?+? "\t" ); ??
- ????????????????????????} ??
- ????????????????????} ??
- ????????????????????sb.append( "\r\n" ); ??
- ????????????????} ??
- ????????????????sb.append( "\r\n" ); ??
- ????????????} ??
- ????????} ??
- ???????? //最后關閉資源,釋放內存??? ??
- ????????wb.close(); ??
- ???????? return ?sb.toString(); ??
- ????} ??
- ??
- ???? /** ?
- ?????*?生成一個Excel文件 ?
- ?????*? ?
- ?????*?@param?fileName ?
- ?????*????????????要生成的Excel文件名 ?
- ?????*/ ??
- ???? public ? static ? void ?writeExcel( final ?String?fileName) ??
- ????{ ??
- ????????WritableWorkbook?wwb?=? null ; ??
- ???????? //格式化 ??
- ???????? final ?WritableCellFormat?totalFormat?=? new ?WritableCellFormat(); ??
- ???????? try ??
- ????????{ ??
- ???????????? //首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象??? ??
- ????????????wwb?=?Workbook.createWorkbook( new ?File(fileName)); ??
- ???????????? //格式化劇中 ??
- ????????????totalFormat.setVerticalAlignment(VerticalAlignment.CENTRE); ??
- ??
- ????????} ??
- ???????? catch ?( final ?IOException?e) ??
- ????????{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ???????? catch ?( final ?WriteException?e) ??
- ????????{ ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ???????? if ?(wwb?!=? null ) ??
- ????????{ ??
- ???????????? //創建一個可寫入的工作表??? ??
- ???????????? //Workbook的createSheet方法有兩個參數,第一個是工作表的名稱,第二個是工作表在工作薄中的位置??? ??
- ???????????? final ?WritableSheet?ws?=?wwb.createSheet( "sheet1" ,? 0 ); ??
- ??
- ???????????? //下面開始添加單元格??? ??
- ???????????? for ?( int ?i?=? 0 ;?i?<? 10 ;?i++) ??
- ????????????{ ??
- ???????????????? for ?( int ?j?=? 0 ;?j?<? 5 ;?j++) ??
- ????????????????{ ??
- ???????????????????? //這里需要注意的是,在Excel中,第一個參數表示列,第二個表示行??? ??
- ???????????????????? final ?Label?labelC?=? new ?Label(j,?i,? "這是第" ?+?(i?+? 1 )?+? "行,第" ?+?(j?+? 1 )?+? "列" ,?totalFormat); ??
- ???????????????????? try ??
- ????????????????????{ ??
- ???????????????????????? //將生成的單元格添加到工作表中??? ??
- ????????????????????????ws.addCell(labelC); ??
- ????????????????????} ??
- ???????????????????? catch ?( final ?RowsExceededException?e) ??
- ????????????????????{ ??
- ????????????????????????e.printStackTrace(); ??
- ????????????????????} ??
- ???????????????????? catch ?( final ?WriteException?e) ??
- ????????????????????{ ??
- ????????????????????????e.printStackTrace(); ??
- ????????????????????} ??
- ??
- ????????????????} ??
- ????????????} ??
- ??
- ???????????? try ??
- ????????????{ ??
- ???????????????? //把?單元格(column,?row)到單元格(column1,?row1)進行合并。 ??
- ????????????????ws.mergeCells( 6 ,? 0 ,? 6 ,? 3 ); ??
- ???????????????? //從內存中寫入文件中??? ??
- ????????????????wwb.write(); ??
- ???????????????? //關閉資源,釋放內存??? ??
- ????????????????wwb.close(); ??
- ????????????} ??
- ???????????? catch ?( final ?IOException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ???????????? catch ?( final ?WriteException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ????????} ??
- ????} ??
- ??
- ???? /** ?
- ?????*?搜索某一個文件中是否包含某個關鍵字 ?
- ?????*? ?
- ?????*?@param?file ?
- ?????*????????????待搜索的文件 ?
- ?????*?@param?keyWord ?
- ?????*????????????要搜索的關鍵字 ?
- ?????*?@return ?
- ?????*/ ??
- ???? public ? static ? boolean ?searchKeyWord( final ?File?file,? final ?String?keyWord) ??
- ????{ ??
- ???????? boolean ?res?=? false ; ??
- ??
- ????????Workbook?wb?=? null ; ??
- ???????? try ??
- ????????{ ??
- ???????????? //構造Workbook(工作薄)對象??? ??
- ????????????wb?=?Workbook.getWorkbook(file); ??
- ????????} ??
- ???????? catch ?( final ?BiffException?e) ??
- ????????{ ??
- ???????????? return ?res; ??
- ????????} ??
- ???????? catch ?( final ?IOException?e) ??
- ????????{ ??
- ???????????? return ?res; ??
- ????????} ??
- ??
- ???????? if ?(wb?==? null )? return ?res; ??
- ??
- ???????? //獲得了Workbook對象之后,就可以通過它得到Sheet(工作表)對象了??? ??
- ???????? final ?Sheet[]?sheet?=?wb.getSheets(); ??
- ??
- ???????? boolean ?breakSheet?=? false ; ??
- ??
- ???????? if ?(sheet?!=? null ?&&?sheet.length?>? 0 ) ??
- ????????{ ??
- ???????????? //對每個工作表進行循環??? ??
- ???????????? for ?( int ?i?=? 0 ;?i?<?sheet.length;?i++) ??
- ????????????{ ??
- ???????????????? if ?(breakSheet)? break ; ??
- ??
- ???????????????? //得到當前工作表的行數??? ??
- ???????????????? final ? int ?rowNum?=?sheet[i].getRows(); ??
- ??
- ???????????????? boolean ?breakRow?=? false ; ??
- ??
- ???????????????? for ?( int ?j?=? 0 ;?j?<?rowNum;?j++) ??
- ????????????????{ ??
- ???????????????????? if ?(breakRow)? break ; ??
- ???????????????????? //得到當前行的所有單元格??? ??
- ???????????????????? final ?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 ; ??
- ???????????????????????????? //讀取當前單元格的值??? ??
- ???????????????????????????? final ?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中插入圖片 ?
- ?????*? ?
- ?????*?@param?dataSheet ?
- ?????*????????????待插入的工作表 ?
- ?????*?@param?col ?
- ?????*????????????圖片從該列開始 ?
- ?????*?@param?row ?
- ?????*????????????圖片從該行開始 ?
- ?????*?@param?width ?
- ?????*????????????圖片所占的列數 ?
- ?????*?@param?height ?
- ?????*????????????圖片所占的行數 ?
- ?????*?@param?imgFile ?
- ?????*????????????要插入的圖片文件 ?
- ?????*/ ??
- ???? public ? static ? void ?insertImg(??? final ?WritableSheet?dataSheet, ??
- ???????????????????????????????????? final ? int ?col, ??
- ???????????????????????????????????? final ? int ?row, ??
- ???????????????????????????????????? final ? int ?width, ??
- ???????????????????????????????????? final ? int ?height, ??
- ???????????????????????????????????? final ?File?imgFile) ??
- ????{ ??
- ???????? final ?WritableImage?img?=? new ?WritableImage(col,?row,?width,?height,?imgFile); ??
- ????????dataSheet.addImage(img); ??
- ????} ??
- ??
- ???? /** ?
- ?????*?向Excel中加入頁眉頁腳 ?
- ?????*? ?
- ?????*?@param?dataSheet ?
- ?????*????????????待加入頁眉的工作表 ?
- ?????*?@param?left ?
- ?????*?@param?center ?
- ?????*?@param?right ?
- ?????*/ ??
- ???? public ? static ? void ?setHeader(??? final ?WritableSheet?dataSheet, ??
- ???????????????????????????????????? final ?String?left, ??
- ???????????????????????????????????? final ?String?center, ??
- ???????????????????????????????????? final ?String?right) ??
- ????{ ??
- ???????? final ?HeaderFooter?hf?=? new ?HeaderFooter(); ??
- ????????hf.getLeft().append(left); ??
- ????????hf.getCentre().append(center); ??
- ????????hf.getRight().append(right); ??
- ???????? //加入頁眉??? ??
- ????????dataSheet.getSettings().setHeader(hf); ??
- ???????? //加入頁腳??? ??
- ???????? //dataSheet.getSettings().setFooter(hf);??? ??
- ????} ??
- ??
- ???? //測試 ??
- ???? public ? static ? void ?main( final ?String[]?arts) ??
- ????{ ??
- ??
- ???????? //測試寫 ??
- ????????ExcelUtils.writeExcel( "test.xls" ); ??
- ??
- ???????? if ?( false ) ??
- ????????{ ??
- ???????????? //測試插入頁眉頁腳 ??
- ???????????? try ??
- ????????????{ ??
- ???????????????? //創建一個工作薄??? ??
- ???????????????? final ?WritableWorkbook?workbook?=?Workbook.createWorkbook( new ?File( "test.xls" )); ??
- ???????????????? //待插入的工作表??? ??
- ???????????????? final ?WritableSheet?dataSheet?=?workbook.createSheet( "加入頁眉" ,? 0 ); ??
- ????????????????ExcelUtils.setHeader(dataSheet,? "chb" ,? "2007-03-06" ,? "第1頁,共3頁" ); ??
- ????????????????workbook.write(); ??
- ????????????????workbook.close(); ??
- ????????????} ??
- ???????????? catch ?( final ?IOException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ???????????? catch ?( final ?WriteException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ????????} ??
- ??
- ???????? if ?( false ) ??
- ????????{ ??
- ???????????? //測試插入圖片 ??
- ???????????? try ??
- ????????????{ ??
- ???????????????? //創建一個工作薄??? ??
- ???????????????? final ?WritableWorkbook?workbook?=?Workbook.createWorkbook( new ?File( "D:/testxls" )); ??
- ???????????????? //待插入的工作表??? ??
- ???????????????? final ?WritableSheet?imgSheet?=?workbook.createSheet( "Images" ,? 0 ); ??
- ???????????????? //要插入的圖片文件??? ??
- ???????????????? final ?File?imgFile?=? new ?File( "D:/png" ); ??
- ???????????????? //圖片插入到第二行第一個單元格,長寬各占六個單元格??? ??
- ????????????????insertImg(imgSheet,? 0 ,? 1 ,? 6 ,? 6 ,?imgFile); ??
- ????????????????workbook.write(); ??
- ????????????????workbook.close(); ??
- ????????????} ??
- ???????????? catch ?( final ?IOException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ???????????? catch ?( final ?WriteException?e) ??
- ????????????{ ??
- ????????????????e.printStackTrace(); ??
- ????????????} ??
- ????????} ??
- ??
- ????} ??
- }??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
