版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1. 引言MS 的電子表格(Excel)是Office 的重要成員,是保存統(tǒng)計數(shù)據(jù)的一種常用格式。在一個Java 應(yīng)用中,將一部分?jǐn)?shù)12021/8/6據(jù)生成Excel 格式,是與其他系統(tǒng)無縫連接的重要手段。在遠(yuǎn)程網(wǎng)絡(luò)教學(xué)系統(tǒng)中,利用Excel 表格統(tǒng)計學(xué)生的作業(yè)考試情況信息,便于老師了22021/8/6解學(xué)生的學(xué)習(xí)情況,分析教學(xué)效果,制定教學(xué)計劃。所以,用Java 操作Excel 表格,導(dǎo)出相關(guān)的信息對于遠(yuǎn)程網(wǎng)絡(luò)教育系統(tǒng)有著的很重要32021/8/6的意義。在開源世界中,有兩套比較有影響的API 提供Excel 數(shù)據(jù)導(dǎo)入導(dǎo)出的功能,一個是POI,一個是jExcelAPI。本文結(jié)合42021/8
2、/6基于J2EE 開發(fā)的多媒體教學(xué)系統(tǒng)中提供的將學(xué)生作業(yè)信息導(dǎo)出到Excel 表格中的實例,詳細(xì)闡述了利用JAVA 開發(fā)的jExcelAPI52021/8/6操作excel 的方法。2. Jxl 簡介2.1 Java 語言簡介Java 語言具有面向?qū)ο?、與平臺無關(guān)、安全、穩(wěn)定和多線程62021/8/6等優(yōu)良特性,是目前軟件設(shè)計中極為強大的編程語言1。它具有以下一些特點2:簡單,面向?qū)ο?,分布式,解釋?zhí)行,魯棒,安全,體系結(jié)72021/8/6構(gòu)中立,可移植,高性能,多線程以及動態(tài)性。2.2 什么是JxlJava Excel 是一開放源碼項目,通過它Java 開發(fā)人員可以讀82021/8/6取Ex
3、cel 文件的內(nèi)容、創(chuàng)建新的Excel 文件、更新已經(jīng)存在的Excel 文件。使用該 API 非Windows 操作系統(tǒng)也可以通92021/8/6過純Java 應(yīng)用來處理Excel 數(shù)據(jù)表。因為是使用Java 編寫的,所以我們在Web 應(yīng)用中可以通過JSP、 Servlet 來調(diào)102021/8/6用API 實現(xiàn)對Excel 數(shù)據(jù)表的訪問。Jxl 發(fā)布的穩(wěn)定版本是V2.0,提供以下功能:從 Excel 95、97、2000 等格112021/8/6式的文件中讀取數(shù)據(jù)3;讀取 Excel 公式(可以讀取Excel 97 以后的公式)3;生成Excel 數(shù)據(jù)表(格式為Excel122021/8/6
4、97)3;支持字體、數(shù)字、日期的格式化3;支持單元格的陰影操作,以及顏色操作3;修改已經(jīng)存在的數(shù)據(jù)表。2.3132021/8/6代碼舉例2.3.1 從Excel 文件讀取數(shù)據(jù)表Java Excel API 既可以從本地文件系統(tǒng)的一個文件(.xls),也可以從輸142021/8/6入流中讀取Excel數(shù)據(jù)表。讀取Excel 數(shù)據(jù)表的第一步是創(chuàng)建Workbook(術(shù)語:工作薄),相關(guān)文獻中給出了部分事例介紹4152021/8/6,下面的代碼片段舉例說明了應(yīng)該如何操作:import java.io.*;import jxl.*; try162021/8/6/構(gòu)建Workbook 對象, 只讀Work
5、book 對象/直接從本地文件創(chuàng)建Workbook/從輸入流創(chuàng)建Workbo172021/8/6okInputStream is=new FileInputStream(sourcefile);jxl.Workbook rwb=182021/8/6Workbook.getWorkbook(is);catch (Exception e)e.printStackTrace(192021/8/6);一旦創(chuàng)建了 Workbook,我們就可以通過它來訪問Excel Sheet(術(shù)語:工作表)。代碼如下:/獲取第一張She202021/8/6et 表Sheet rs=rwb.getSheet(0);我們既
6、可能通過Sheet 的名稱來訪問它,也可以通過下標(biāo)來訪問它。如果通過212021/8/6下標(biāo)來訪問的話,要注意的一點是下標(biāo)從0 開始,就像數(shù)組一樣。一旦得到了 Sheet,我們就可以通過它來訪問Excel Cell(術(shù)語222021/8/6:單元格)。代碼如下:/獲取第一行,第一列的值Cell c00=rs.getCell(0, 0);String strc00=232021/8/6c00.getContents();/獲取第一行,第二列的值Cell c10=rs.getCell(1, 0);String242021/8/6strc10=c10.getContents();/獲取第二行,第二列
7、的值Cell c11=rs.getCell(1, 1);St252021/8/6ring strc11=c11.getContents();如果僅僅是取得Cell 的值,我們可以方便地通過getContents()方262021/8/6法,它可以將任何類型的Cell 值都作為一個字符串返回。示例代碼中 Cell(0, 0)是文本型,Cell(1, 0)是數(shù)字型,Ce272021/8/6ll(1,1)是日期型,通過getContents(),三種類型的返回值都是字符型。當(dāng)完成對 Excel 電子表格數(shù)據(jù)的處理后,一定要使282021/8/6用close()方法來關(guān)閉先前創(chuàng)建的對象,以釋放讀取數(shù)據(jù)
8、表的過程中所占用的內(nèi)存空間,在讀取大量數(shù)據(jù)時顯得尤為重要。/操作完成時,關(guān)292021/8/6閉對象,釋放占用的內(nèi)存空間rwb.close();2.3.2 生成新的Excel 工作薄與讀取 Excel 工作表相似,首先要使302021/8/6用Workbook 類的工廠方法創(chuàng)建一個可寫入的工作薄(Workbook)對象,相關(guān)文獻中給出了事例介紹4,具體代碼如下:try312021/8/6/構(gòu)建Workbook 對象, 只讀Workbook 對象/Method 1:創(chuàng)建可寫入的Excel 工作薄jxl.w322021/8/6rite.WritableWorkbook wwb=Workbook.c
9、reateWorkbook(new File(targetfile)332021/8/6);/Method 2:將WritableWorkbook 直接寫入到輸出流catch (Exception e)e.342021/8/6printStackTrace();/創(chuàng)建Excel 工作表jxl.write.WritableSheet ws=wwb.cre352021/8/6ateSheet(Test Sheet 1, 0);/1.添加Label 對象jxl.write.Label labelC=n362021/8/6ew jxl.write.Label(0, 0, This is a Label
10、 cell);ws.addCell(labelC);372021/8/6/添加帶有字型Formatting 的對象jxl.write.WritableFont wf=new jxl.write.Writab382021/8/6leFont(WritableFont.TIMES,18,WritableFont.BOLD, true);jxl.write.Wr392021/8/6itableCellFormat wcfF=new jxl.write.WritableCellFormat(wf);jxl.write402021/8/6.Label labelCF=new jxl.write.Labe
11、l(1, 0, This is a Label Cell, wcfF)412021/8/6;ws.addCell(labelCF);2.3.3 單元格操作1)合并單元格WritableSheet.mergeCell422021/8/6s(int m,int n,int p,int q);作用是從(m,n)到(p,q)的單元格全部合并,比如:WritableShee432021/8/6t sheet=book.createSheet(“第一頁”,0) 5;/合并第一列第一行到第六列第一行的所有單元格sheet442021/8/6.mergeCells(0,0,5,0);合并既可以是橫向的,也可以
12、是縱向的。合并后的單元格不能再次進行合并,否則會觸發(fā)異常。2452021/8/6)行高和列寬WritableSheet.setRowView(int i,int height);作用是指定第i+1 行的高度,比如462021/8/6:/將第一行的高度設(shè)為2005sheet.setRowView(0,200);WritableSheet.setColum472021/8/6nView(int i,int width);作用是指定第i+1 列的寬度,比如:/將第一列的寬度設(shè)為305sheet.s482021/8/6etColumnView(0,30);3. 應(yīng)用實例本文所舉的實例為網(wǎng)上多媒體教學(xué)系
13、統(tǒng)中對于學(xué)生作業(yè)導(dǎo)出信息的實現(xiàn)。3.1 系統(tǒng)492021/8/6界面及導(dǎo)出表實例下圖 1 為導(dǎo)出功能的入口:點擊導(dǎo)出此次作業(yè)的成績按鈕,就會觸發(fā)相應(yīng)的動作,進行數(shù)據(jù)表的導(dǎo)出3.2 實現(xiàn)代碼導(dǎo)出502021/8/6之前首先要定義一個 SingleTaskScoreExportInfo 對象,用來存放從數(shù)據(jù)庫中查詢出來的導(dǎo)出表需要的相關(guān)字段的信息。它512021/8/6是作業(yè)接收者對象的一個子集,只包含了作業(yè)接收者對象中學(xué)號,姓名,班級,作業(yè)標(biāo)題,完成時間,分?jǐn)?shù),查看次數(shù)等信息。為數(shù)據(jù)導(dǎo)出按鈕連接消522021/8/6息處理函數(shù):函數(shù)主要包括生成工作表,調(diào)用方法從數(shù)據(jù)庫中將對應(yīng)某次作業(yè)的作業(yè)接收者
14、的信息查找出來, 并用相關(guān)的屬性初始化SingleT532021/8/6askScoreExportInfo 對象,放在結(jié)果集中,構(gòu)造循環(huán)將查詢到的結(jié)果集中的對象寫入到Excel 表格中。以下是實現(xiàn)的主要代碼542021/8/6:/定義表格名稱為作業(yè)成績,創(chuàng)建工作薄String filename=作業(yè)成績;response.setHeader(C552021/8/6ontent-Disposition ,attachment;filename=+newString(filename.getBy562021/8/6tes(),iso8859-1)+.xls);OutputStream os=re
15、sponse.getOutputStream(572021/8/6);WritableWorkbook wwb=Workbook.createWorkbook(os);/創(chuàng)建工作表,并寫入相應(yīng)的表582021/8/6頭字段WritableSheet sheet=wwb.createSheet(所有成績, 0);String title=學(xué)592021/8/6號,班級,姓名,作業(yè)標(biāo)題,完成時間,分?jǐn)?shù),次數(shù);for (int j=0; j title.length602021/8/6; j+) / 在sheet 中寫標(biāo)題欄sheet.addCell(new Label(j, 0, titlej,
16、arial612021/8/612format);/查詢需要的數(shù)據(jù),放在List 結(jié)果集中List s622021/8/6cores =studyManager.getSingleTaskScoresByCourse(courseId,taskId);/632021/8/6/將相關(guān)的信息寫入到工作表SingleTaskScoreExportInfo item;int row=1;for (it=sc642021/8/6ores.iterator(); it.hasNext();) item=(SingleTaskScoreExportInfo) it652021/8/6.next();if(!
17、.equals(item.getStudentNum()&null!=item.getStudentNu662021/8/6m()/添加學(xué)號Label label=new Label(0, row, item.getStudentNum();s672021/8/6heet.setColumnView(0, 20);sheet.addCell(label);/添加班級label=new L682021/8/6abel(1, row, item.getClassGroupName();sheet.setColumnView(1, 50);692021/8/6sheet.addCell(la
18、bel);/添加姓名label=new Label(2,row,item.getStudentNa702021/8/6me();sheet.setColumnView(2, 10);sheet.addCell(label);/添加作業(yè)標(biāo)題712021/8/6label=new Label(3,row,item.getTaskTitle();sheet.setColumnView(3, 30722021/8/6);sheet.addCell(label);/ 添加完成時間SimpleDateFormat sdf=new SimpleD732021/8/6ateFormat(yyyy-MM-dd
19、HH:mm:ss);WritableCellFormat wc=new WritableC742021/8/6ellFormat();wc.setAlignment(Alignment.CENTRE);sheet.setColumnView(4,752021/8/630);if(item.getFinishTime()!=null)String newdate=sdf.format(item.762021/8/6getFinishTime();label=new Label(4,row,newdate,wc);sheet.addCell(l772021/8/6abel); elselabel=
20、new Label(4,row,未查看此次作業(yè),wc);sheet.addCell(label782021/8/6);/添加分?jǐn)?shù)Number score=new Number(5, row, item.getScore(), wcf);d792021/8/6ouble score_temp=score.getValue();if(0score_temp&score_temp0.6)802021/8/6 sheet.addCell(new Number(5, row, score_temp*100, redFormat); els812021/8/6e if (item.getFinishTime()=null)sheet.addCell(new Number(5, row, -1,822021/8/6redFormat);else if(item.getFinishTime()!=null&(score_temp=0|832021/8/6.equals(item.getScore()sh
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生態(tài)園區(qū)場地租賃合同標(biāo)準(zhǔn)范本6篇
- 二零二五年新能源發(fā)電設(shè)施建設(shè)泥工勞務(wù)合同3篇
- 二零二五版海上貨物運輸合同適用范圍與船舶代理服務(wù)合同3篇
- 二零二五年度環(huán)境安全檢測技術(shù)服務(wù)合同2篇
- 二零二五年度防火門銷售、推廣及市場拓展合同3篇
- 二零二五版智慧城市基礎(chǔ)設(shè)施建設(shè)項目施工合同6篇
- 二零二五版新材料研發(fā)中心與實驗員勞務(wù)合同2篇
- 二零二五年度游戲運營合同3篇
- 二零二五版醫(yī)療器械貼牌研發(fā)及銷售合同3篇
- 二零二五版304不銹鋼建筑結(jié)構(gòu)材料采購合同2篇
- 品質(zhì)經(jīng)理工作總結(jié)
- 供電搶修述職報告
- 集成電路設(shè)計工藝節(jié)點演進趨勢
- 新型電力系統(tǒng)簡介演示
- 特種設(shè)備行業(yè)團隊建設(shè)工作方案
- 眼內(nèi)炎患者護理查房課件
- 肯德基經(jīng)營策略分析報告總結(jié)
- 買賣合同簽訂和履行風(fēng)險控制
- 中央空調(diào)現(xiàn)場施工技術(shù)總結(jié)(附圖)
- 水質(zhì)-濁度的測定原始記錄
- 數(shù)字美的智慧工業(yè)白皮書-2023.09
評論
0/150
提交評論