版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统 计数据的一种常用格式。在一 个Java 应用中,将一部分数 2 据生成Excel 格式,是与其他系统无缝连接的重要手段。 在远程 网络教学系统中,利用Excel 表格统计学生的作业考试情 况信息,便于老师了 3 解学生的学习 情况,分析教学效果,制定教学计划。所以,用Java 操 作Excel 表格,导出相关的信息对于 远程网络教育系统有着的很重要 4 的意义。 在开源世界中,有两套比较有影响的API 提供Excel 数据 导入导出的功能,一个是POI, 一个是jExcelAPI。本文结合 5 基于J2EE 开
2、发的多媒体教学系统中提供的将学生作业信 息导出 到Excel 表格中的实例,详细阐述了利用JAVA 开发的 jExcelAPI 6 操作excel 的方法。 2. Jxl 简介 2.1 Java 语言简介 Java 语言具有面向对象、与平台无关、安全、稳定和多线程 7 等优良特性,是目前软件设 计中极为强大的编程语言1。它具有以下一些特点2: 简单,面向对象,分布式,解释执行, 鲁棒,安全,体系结 8 构中立,可移植,高性能,多线程以及动态性。 2.2 什么是Jxl Java Excel 是一开放源码项目,通过它Java 开发人员可以 读 9 取Excel 文件的内容、创建 新的Excel 文
3、件、更新已经存在的Excel 文件。使用该 API 非Windows 操作系统也可以通 10 过纯Java 应用来处理Excel 数据表。因为是使用Java 编写 的,所以我们在Web 应用中可以 通过JSP、 Servlet 来调 11 用API 实现对Excel 数据表的访问。 Jxl 发布的稳定版本是V2.0,提供以下功能: 从 Excel 95、97、2000 等格 12 式的文件中读取数据3; 读取 Excel 公式(可以读取Excel 97 以后的公式)3;生 成Excel 数据表(格式为Excel 13 97)3; 支持字体、数字、日期的格式化3; 支持单元格的阴影操作,以及颜色
4、操作3; 修改已经存在的数据表。 2.3 14 代码举例 2.3.1 从Excel 文件读取数据表 Java Excel API 既可以从本地文件系统的一个文件(.xls),也 可以从输 15 入流中读取Excel 数据表。读取Excel 数据表的第一步是创建Workbook(术语: 工作薄),相关文献中给出了 部分事例介绍4 16 ,下面的代码片段举例说明了应该如何操作: import java.io.*; import jxl.*; try 17 /构建Workbook 对象, 只读Workbook 对象 /直接从本地文件创建Workbook /从输入流创建Workbo 18 ok Inp
5、utStream is=new FileInputStream(sourcefile); jxl.Workbook rwb= 19 Workbook.getWorkbook(is); catch (Exception e) e.printStackTrace( 20 ); 一旦创建了 Workbook,我们就可以通过它来访问Excel Sheet(术语: 工作表)。代码如 下: /获取第一张She 21 et 表 Sheet rs=rwb.getSheet(0); 我们既可能通过Sheet 的名称来访问它,也可以通过下标 来访问它。如果通过 22 下标来访 问的话,要注意的一点是下标从0 开始
6、,就像数组一样。 一旦得到了 Sheet,我们就可以通过它来访问Excel Cell(术 语 23 :单元格)。代码如下: /获取第一行,第一列的值 Cell c00=rs.getCell(0, 0); String strc00= 24 c00.getContents(); /获取第一行,第二列的值 Cell c10=rs.getCell(1, 0); String 25 strc10=c10.getContents();/获取第二行,第二列的值 Cell c11=rs.getCell(1, 1); St 26 ring strc11=c11.getContents(); 如果仅仅是取得Ce
7、ll 的值,我们可以方便地通过 getContents()方 27 法,它可以将任何类型 的Cell 值都作为一个字符串返回。示例代码中 Cell(0, 0)是 文本型,Cell(1, 0)是数字型, Ce 28 ll(1,1)是日期型,通过getContents(),三种类型的返回值 都是字符型。 当完成对 Excel 电子表格数据的处理后,一定要使 29 用close()方法来关闭先前创建的对象, 以释放读取数据表的过程中所占用的内存空间,在读取 大量数据时显得尤为重要。 /操作完成时,关 30 闭对象,释放占用的内存空间 rwb.close(); 2.3.2 生成新的Excel 工作薄
8、与读取 Excel 工作表相似,首先要使 31 用Workbook 类的工厂方法创建一个可写入的工作 薄(Workbook)对象,相关文献中给出了事例介绍4,具 体代码如下: try 32 /构建Workbook 对象, 只读Workbook 对象 /Method 1:创建可写入的Excel 工作薄 jxl.w 33 rite.WritableWorkbook wwb=Workbook.createWorkbook(new File(targetfile) 34 ); /Method 2:将WritableWorkbook 直接写入到输出流 catch (Exception e) e. 35
9、printStackTrace(); /创建Excel 工作表 jxl.write.WritableSheet ws=wwb.cre 36 ateSheet(Test Sheet 1, 0); /1.添加Label 对象 jxl.write.Label labelC=n 37 ew jxl.write.Label(0, 0, This is a Label cell); ws.addCell(labelC); 38 /添加带有字型Formatting 的对象 jxl.write.WritableFont wf=new jxl.write.Writab 39 leFont(WritableFon
10、t.TIMES,18, WritableFont.BOLD, true); jxl.write.Wr 40 itableCellFormat wcfF=new jxl.write.WritableCellFormat(wf); jxl.write 41 .Label labelCF=new jxl.write.Label(1, 0, This is a Label Cell, wcfF) 42 ; ws.addCell(labelCF); 2.3.3 单元格操作 1)合并单元格 WritableSheet.mergeCell 43 s(int m,int n,int p,int q); 作用是
11、从(m,n)到(p,q)的单元格全部合并,比如: WritableShee 44 t sheet=book.createSheet(“第一页”,0) 5; /合并第一列第一行到第六列第一行的所有单元格 sheet 45 .mergeCells(0,0,5,0); 合并既可以是横向的,也可以是纵向的。合并后的单元格不能再 次进行合并,否则会触 发异常。 2 46 )行高和列宽 WritableSheet.setRowView(int i,int height); 作用是指定第i+1 行的高度,比如 47 : /将第一行的高度设为2005 sheet.setRowView(0,200); Writ
12、ableSheet.setColum 48 nView(int i,int width); 作用是指定第i+1 列的宽度,比如: /将第一列的宽度设为305 sheet.s 49 etColumnView(0,30); 3. 应用实例 本文所举的实例为网上多媒体教学系统中对于学生作业导出信息 的实现。 3.1 系统 50 界面及导出表实例 下图 1 为导出功能的入口:点击导出此次作业的成绩按钮,就会 触发相应的动作,进行 数据表的导出3.2 实现代码 导出 51 之前首先要定义一个 SingleTaskScoreExportInfo 对象,用 来存放从数据库中查询出 来的导出表需要的相关字段的
13、信息。它 52 是作业接收者对象的一个子集,只包含了作业接收者 对象中学号,姓名,班级,作业标题,完成时间,分数, 查看次数等信息。 为数据导出按钮连接消 53 息处理函数:函数主要包括生成工作表,调用方法从数据库中将 对应某次作业的作业接收者的信息查找出来, 并用相关的属性初 始化 SingleT 54 askScoreExportInfo 对象,放在结果集中,构造循环将查 询到的结果集中的对象写入 到Excel 表格中。以下是实现的主要代码 55 : /定义表格名称为作业成绩,创建工作薄 String filename=作业成绩; response.setHeader(C 56 onten
14、t-Disposition ,attachment;filename=+new String(filename.getBy 57 tes(),iso8859-1)+.xls); OutputStream os=response.getOutputStream( 58 ); WritableWorkbook wwb=Workbook.createWorkbook(os); /创建工作表,并写入相应的表 59 头字段WritableSheet sheet=wwb.createSheet(所有成绩, 0); String title=学 60 号,班级,姓名,作业标题,完成时间,分数,次数; for
15、 (int j=0; j title.length 61 ; j+) / 在sheet 中写标题栏 sheet.addCell(new Label(j, 0, titlej, arial 62 12format); /查询需要的数据,放在List 结果集中 List s 63 cores = studyManager.getSingleTaskScoresByCourse(courseId,taskId); / 64 /将相关的信息写入到工作表 SingleTaskScoreExportInfo item; int row=1; for (it=sc 65 ores.iterator(); i
16、t.hasNext();) item=(SingleTaskScoreExportInfo) it 66 .next(); if(!.equals(item.getStudentNum() s 68 heet.setColumnView(0, 20); sheet.addCell(label); /添加班级 label=new L 69 abel(1, row, item.getClassGroupName(); sheet.setColumnView(1, 50); 70 sheet.addCell(label); /添加姓名 label=new Label(2,row,item.getSt
17、udentNa 71 me(); sheet.setColumnView(2, 10); sheet.addCell(label); /添加作业标题 72 label=new Label(3,row,item.getTaskTitle(); sheet.setColumnView(3, 30 73 ); sheet.addCell(label); / 添加完成时间 SimpleDateFormat sdf=new SimpleD 74 ateFormat(yyyy-MM-dd HH:mm:ss); WritableCellFormat wc=new WritableC 75 ellFormat
18、();wc.setAlignment(Alignment.CENTRE); sheet.setColumnView(4, 76 30); if(item.getFinishTime()!=null) String newdate=sdf.format(item. 77 getFinishTime(); label=new Label(4,row,newdate,wc); sheet.addCell(l 78 abel); elselabel=new Label(4,row,未查看此次作业 ,wc);sheet.addCell(label 79 ); /添加分数 Number score=new Number(5, row, item.getScore(), wcf); d 80 ouble score_temp=score.getValue(); if(0score_temp els 82 e if (item.getFinishTime()=null)sheet.addCell(new Number(5, row, -1, 83 redFormat); e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理职业安全与防护措施
- 护理礼仪的礼仪实践
- 护理励志教育:构建和谐医患关系的桥梁
- 压力管理与睡眠改善
- 快消品行业技术顾问的招聘面试流程介绍
- 零售业客户服务流程优化实践
- 零售业财务管理实务与面试要点详解
- 联想电脑技术支持面试技巧
- 连锁便利店会计系统分析及运营要务面试全攻略
- 快消品行业财务审计岗位面试要点
- 休克诊疗规范课件
- 2025年新生儿窒息复苏试题及答案
- 20万吨-年采矿废石综合回收利用项目环境影响报告书
- (一诊)2026年兰州市高三模拟考试历史试卷(含答案)
- 2026贵州安顺关岭恒升村镇银行春季招聘4人考试参考题库及答案解析
- 企业内部福利待遇制度
- 步进电机及其工作原理
- 护理查房慢性肾脏病5期护理查房
- 公差分析高级
- 热风循环烘箱验证方案及报告
- 中学教师职称晋升(中学英语)专业考试说明书及试卷
评论
0/150
提交评论