Java生成和操做Excel文件html
JAVA EXCEL API:是一開放源碼項目,經過它Java開發人員能夠讀取Excel文件的內容、建立新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操做系統也能夠經過純Java應用來處理Excel數據表。由於它是使用Java編寫的,因此咱們在Web應用中能夠經過JSP、Servlet來調用API實現對Excel數據表的訪問。java
下載:api
官方網站 http://www.andykhan.com/jexcelapi/ 下載最新版本(本人下的是jexcelapi_2_6_12.tar.gz,解壓後將裏面的jxl.jar複製到WEB-INF/lib目錄下面便可)網絡
Java Excel API的jar包能夠經過如下URL得到:app
http://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.6/jexcelapi_2_6_6.zip/downloadjsp
(包括全部版本):http://sourceforge.net/projects/jexcelapi/files/函數
直接下載地址(迅雷上新建任務便可):佈局
http://nchc.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.6/jexcelapi_2_6_6.zippost
1、JSP生成簡單的Excel文件測試
package beans.excel; import java.io.IOException; import java.io.OutputStream; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class SimpleExcelWrite { public void createExcel(OutputStream os) throws WriteException,IOException{ //建立工做薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //建立新的一頁 WritableSheet sheet = workbook.createSheet("First Sheet",0); //建立要顯示的內容,建立一個單元格,第一個參數爲列座標,第二個參數爲行座標,第三個參數爲內容 Label xuexiao = new Label(0,0,"學校"); sheet.addCell(xuexiao); Label zhuanye = new Label(1,0,"專業"); sheet.addCell(zhuanye); Label jingzhengli = new Label(2,0,"專業競爭力"); sheet.addCell(jingzhengli); Label qinghua = new Label(0,1,"清華大學"); sheet.addCell(qinghua); Label jisuanji = new Label(1,1,"計算機專業"); sheet.addCell(jisuanji); Label gao = new Label(2,1,"高"); sheet.addCell(gao); Label beida = new Label(0,2,"北京大學"); sheet.addCell(beida); Label falv = new Label(1,2,"法律專業"); sheet.addCell(falv); Label zhong = new Label(2,2,"中"); sheet.addCell(zhong); Label ligong = new Label(0,3,"北京理工大學"); sheet.addCell(ligong); Label hangkong = new Label(1,3,"航空專業"); sheet.addCell(hangkong); Label di = new Label(2,3,"低"); sheet.addCell(di); //把建立的內容寫入到輸出流中,並關閉輸出流 workbook.write(); workbook.close(); os.close(); } }
SimpleExcelWrite.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="java.io.*" %> <%@ page import="beans.excel.*" %> <% String fname = "學校競爭力狀況"; OutputStream os = response.getOutputStream();//取得輸出流 response.reset();//清空輸出流 //下面是對中文文件名的處理 response.setCharacterEncoding("UTF-8");//設置相應內容的編碼格式 fname = java.net.URLEncoder.encode(fname,"UTF-8"); response.setHeader("Content-Disposition","attachment;filename="+new String(fname.getBytes("UTF-8"),"GBK")+".xls"); response.setContentType("application/msexcel");//定義輸出類型 SimpleExcelWrite sw = new SimpleExcelWrite(); sw.createExcel(os); %> <html> <head> <title></title> </head> <body> </body> </html>
2、生成複雜數據格式Excel文件
package beans.excel; import java.io.IOException; import java.io.OutputStream; import java.util.Calendar; import java.util.Date; import jxl.Workbook; import jxl.write.Boolean; import jxl.write.DateFormats; import jxl.write.DateTime; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class ComplexDataExcelWrite { public void createExcel(OutputStream os) throws WriteException,IOException { //建立工做薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //建立新的一頁 WritableSheet sheet = workbook.createSheet("First Sheet", 0); //建立要顯示的具體內容 Label formate = new Label(0,0,"數據格式"); sheet.addCell(formate); Label floats = new Label(1,0,"浮點型"); sheet.addCell(floats); Label integers = new Label(2,0,"整型"); sheet.addCell(integers); Label booleans = new Label(3,0,"布爾型"); sheet.addCell(booleans); Label dates = new Label(4,0,"日期格式"); sheet.addCell(dates); Label example = new Label(0,1,"數據示例"); sheet.addCell(example); //浮點數據 Number number = new Number(1,1,3.1415926535); sheet.addCell(number); //整形數據 Number ints = new Number(2,1,15042699); sheet.addCell(ints); Boolean bools = new Boolean(3,1,true); sheet.addCell(bools); //日期型數據 Calendar c = Calendar.getInstance(); Date date = c.getTime(); WritableCellFormat cf1 = new WritableCellFormat(DateFormats.FORMAT1); DateTime dt = new DateTime(4,1,date,cf1); sheet.addCell(dt); //把建立的內容寫入到輸出流中,並關閉輸出流 workbook.write(); workbook.close(); os.close(); } }
3、生成複雜佈局和樣式的Excel文件
package beans.excel; import java.io.IOException; import java.io.OutputStream; import java.util.Calendar; import java.util.Date; import jxl.Workbook; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.write.Boolean; import jxl.write.DateFormats; import jxl.write.DateTime; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class MutiStyleExcelWrite { public void createExcel(OutputStream os) throws WriteException,IOException { //建立工做薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //建立新的一頁 WritableSheet sheet = workbook.createSheet("First Sheet", 0); //構造表頭 sheet.mergeCells(0, 0, 4, 0);//添加合併單元格,第一個參數是起始列,第二個參數是起始行,第三個參數是終止列,第四個參數是終止行 WritableFont bold = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//設置字體種類和黑體顯示,字體爲Arial,字號大小爲10,採用黑體顯示 WritableCellFormat titleFormate = new WritableCellFormat(bold);//生成一個單元格樣式控制對象 titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//單元格中的內容水平方向居中 titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//單元格的內容垂直方向居中 Label title = new Label(0,0,"JExcelApi支持數據類型詳細說明",titleFormate); sheet.setRowView(0, 600, false);//設置第一行的高度 sheet.addCell(title); //建立要顯示的具體內容 WritableFont color = new WritableFont(WritableFont.ARIAL);//選擇字體 color.setColour(Colour.GOLD);//設置字體顏色爲金黃色 WritableCellFormat colorFormat = new WritableCellFormat(color); Label formate = new Label(0,1,"數據格式",colorFormat); sheet.addCell(formate); Label floats = new Label(1,1,"浮點型"); sheet.addCell(floats); Label integers = new Label(2,1,"整型"); sheet.addCell(integers); Label booleans = new Label(3,1,"布爾型"); sheet.addCell(booleans); Label dates = new Label(4,1,"日期格式"); sheet.addCell(dates); Label example = new Label(0,2,"數據示例",colorFormat); sheet.addCell(example); //浮點數據 //設置下劃線 WritableFont underline= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE); WritableCellFormat greyBackground = new WritableCellFormat(underline); greyBackground.setBackground(Colour.GRAY_25);//設置背景顏色爲灰色 Number number = new Number(1,2,3.1415926535,greyBackground); sheet.addCell(number); //整形數據 WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑體 WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber); Number ints = new Number(2,2,15042699,boldNumberFormate); sheet.addCell(ints); //布爾型數據 Boolean bools = new Boolean(3,2,true); sheet.addCell(bools); //日期型數據 //設置黑體和下劃線 WritableFont boldDate = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD,false,UnderlineStyle.SINGLE); WritableCellFormat boldDateFormate = new WritableCellFormat(boldDate,DateFormats.FORMAT1); Calendar c = Calendar.getInstance(); Date date = c.getTime(); DateTime dt = new DateTime(4,2,date,boldDateFormate); sheet.addCell(dt); //把建立的內容寫入到輸出流中,並關閉輸出流 workbook.write(); workbook.close(); os.close(); } }
4、JSP讀取Excel報表
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="java.io.File" %> <%@ page import="jxl.Cell" %> <%@ page import="jxl.Sheet" %> <%@ page import="jxl.Workbook" %> <html> <head> <title></title> </head> <body> <font size="2"> <% String fileName = "D:/學校競爭力狀況.xls"; File file = new File(fileName);//根據文件名建立一個文件對象 Workbook wb = Workbook.getWorkbook(file);//從文件流中取得Excel工做區對象 Sheet sheet = wb.getSheet(0);//從工做區中取得頁,取得這個對象的時候既能夠用名稱來得到,也能夠用序號。 String outPut = ""; outPut = outPut + "<b>" + fileName + "</b><br>"; outPut = outPut + "第一個sheet的名稱爲:" + sheet.getName() + "<br>"; outPut = outPut + "第一個sheet共有:" + sheet.getRows() + "行" + sheet.getColumns() + "列<br>"; outPut = outPut + "具體內容以下:<br>"; for(int i=0; i < sheet.getRows(); i++){ for(int j=0; j < sheet.getColumns(); j++){ Cell cell = sheet.getCell(j,i); outPut = outPut + cell.getContents() + " "; } outPut = outPut + "<br>"; } out.println(outPut); %> </font> </body> </html>
示例1:讀取本地Excel文件F:\紅樓人物.xls
1. 新建Excel文件F:\紅樓人物.xls
內容以下:
2. Java經過jexcelapi包操做excel文件:
3. 結果:
① 控制檯輸出:
人物 等級 大觀園位置 金陵十二釵
林黛玉 小姐 瀟湘館 正冊
妙玉 世外 櫳翠庵 正冊
晴雯 丫環 怡紅院 副冊
香菱 妾 蘅蕪苑 又副冊
② 建立文件F:\紅樓人物1.xls
4. 程序解析:
所引用的包:
① Workbook對象,須要jxl.Workbook包;
② InputStream、FileInputStream對象:須要java.io.FileInputStream和java.io.InputStream包。
③ Sheet對象:jxl.Sheet包;注意excel中sheet表單的行列從0開始計數。
④ Cell對象:jxl.Cell包;對單元進行處理
⑤ Label:選擇jxl.write.label包
⑥ WritableWorkbook、WritableSheet、WritableCelll對象
實例二:3個功能-----從excel文件F:\紅樓人物.xls讀取數據;生成新的excel文件F:\紅樓人物2.xls;修改原excel一個單元並輸出爲F:\紅樓人物3.xls。
原始文件:F:\紅樓人物.xls
運行結果:
① 控制檯輸出:
人物 等級 大觀園位置 金陵十二釵
林黛玉 小姐 瀟湘館 正冊
妙玉 世外 櫳翠庵 正冊
晴雯 丫環 怡紅院 副冊
香菱 妾 蘅蕪苑 又副冊
② 寫入輸出Excel文件:F:\紅樓人物2.xls
③ 修改輸出文件 F:\紅樓人物3.xls (加修飾後輸出)
示例程序:
附:
調用流程以下:
1.打開工做文件Workbook,在此以前先用java的io流建立或者讀取文件
2.打開工做表Sheet
3.讀行,而後讀列。注意,行和列是從零開始的
4.取得數據進行操做
來自網絡à讀取Excel數據表
第一步:建立Workbook(術語:工做薄)
2種方法:Workbook,就能夠經過它來訪問Excel Sheet(術語:工做表):
一旦建立了
第二步:訪問sheet。
2種方法:經過sheet的名稱;或者經過下標,下標從0開始。
第四步:操做數據
若是僅僅是取得Cell的 值,咱們能夠方便地經過getContents()方法,它能夠將任何類型的Cell值都做爲一個字符串返回。若是有須要知道Cell內容的確切類型,API也提供了一系列的方法:
在獲得
循環取出所有數據,並轉化爲相應格式:
第五步:關閉對象,釋放內存。
完成對Excel電子表格數據的處理後,必定要使用close()方法來關閉先前建立的對象,以釋放讀取數據表的過程當中所佔用的內存空間,在讀取大量數據時顯得尤其重要。
Cell對象後,經過 getType()方法能夠得到該單元格的類型,而後與API提供的基本類型相匹配,強制轉換成相應的類型,最後調用相應的取值方法getXXX(),就能夠獲得肯定類型的值。
來自:http://www.cnblogs.com/wuxinrui/archive/2011/03/20/1989326.html