需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中。再进行判空处赋值处理,以及去重处理。这篇博客,主要介绍读取excel表和导出excel表的方法。

一、读取Excel数据到list

<span style="font-family:KaiTi_GB2312;font-size:18px;">	/**
* 把输入流文件转变成list集合
*
* @param inExcelFile
* @return
*/
public List<CurriclumScheduleEntityModel> getExcelData(
InputStream inExcelFile) {
// 创建一个list 用来存储读取的内容
List<CurriclumScheduleEntityModel> list = new ArrayList();
Workbook rwb = null;
Cell cell = null; // 获取Excel文件对象
try {
rwb = Workbook.getWorkbook(inExcelFile);
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // 获取文件的指定工作表 默认的第一个
Sheet sheet = rwb.getSheet(0); // 行数(表头的目录不需要,从1开始)
for (int i = 1; i < sheet.getRows(); i++) { CurriclumScheduleEntityModel model = new CurriclumScheduleEntityModel(); model.setSemesterName(sheet.getCell(0, i).getContents()); // 第一列:学年学期
model.setClassName(sheet.getCell(1, i).getContents()); // 第二列:班级
model.setCourseName(sheet.getCell(2, i).getContents()); // 第三列:课程名称
model.setCourseCode(sheet.getCell(3, i).getContents()); // 第四列:课程代码
model.setTeacherName(sheet.getCell(4, i).getContents()); // 第五列:教师名称
model.setTeacherCode(sheet.getCell(5, i).getContents()); // 第六列:教工号
model.setRoomName(sheet.getCell(6, i).getContents()); // 第七列:教室名称
model.setStartWeek(sheet.getCell(7, i).getContents()); // 第八列:开始周
model.setEndWeek(sheet.getCell(8, i).getContents()); // 第九列:结束周
model.setEndWeek(sheet.getCell(9, i).getContents()); // 第十列:是否奇数周
model.setWeekName(sheet.getCell(10, i).getContents()); // 第十一列:星期
model.setCellTimeName(sheet.getCell(11, i).getContents()); // 第十二列:节次 // 把刚获取的列存入list
list.add(model);
} return list;
}</span>

二、将list数据导出到excel表

将list数据导出到excel表一般情况有两种方式:POI和JXL。在这里介绍的是POI的方式,为什么选取POI?

在最开始的时候,是直接调用底层封装的方法(JXL),但是由于响应值response冲突,总是报已经调用getOutStream 的错误,所以选取了POI的形式。

首先,更改maven的pom.xml文件

在maven的pom文件中,添加POI需要的jar包依赖(如果没有使用maven仓库管理,则需要下载响应的jar包进行引入):

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre">		</span><dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency></span>

其次,编写导出代码

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="white-space:pre">	</span>public void ExportExcel(List<CurriclumScheduleEntityModel> list) {
// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("导入失败的课表");
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 HSSFCell cell = row.createCell((short) 0);
cell.setCellValue("学年学期");
cell.setCellStyle(style); cell = row.createCell((short) 1);
cell.setCellValue("班级");
cell.setCellStyle(style); cell = row.createCell((short) 2);
cell.setCellValue("课程名称");
cell.setCellStyle(style); cell = row.createCell((short) 3);
cell.setCellValue("课程代码");
cell.setCellStyle(style); cell = row.createCell((short) 4);
cell.setCellValue("教师姓名");
cell.setCellStyle(style); cell = row.createCell((short) 5);
cell.setCellValue("教工号");
cell.setCellStyle(style); cell = row.createCell((short) 6);
cell.setCellValue("教室名称");
cell.setCellStyle(style); cell = row.createCell((short) 7);
cell.setCellValue("开始周");
cell.setCellStyle(style); cell = row.createCell((short) 8);
cell.setCellValue("结束周");
cell.setCellStyle(style); cell = row.createCell((short) 9);
cell.setCellValue("是否为奇数周");
cell.setCellStyle(style); cell = row.createCell((short) 10);
cell.setCellValue("星期");
cell.setCellStyle(style); cell = row.createCell((short) 11);
cell.setCellValue("节次");
cell.setCellStyle(style);
// 第五步,写入实体数据 实际应用中这些数据从数据库得到, for (int i = 0; i < list.size(); i++) {
row = sheet.createRow((int) i + 1);
CurriclumScheduleEntityModel CS = (CurriclumScheduleEntityModel) list
.get(i);
// 第四步,创建单元格,并设置值
row.createCell((short) 0).setCellValue(CS.getSemesterName());
row.createCell((short) 1).setCellValue(CS.getClassName());
row.createCell((short) 2).setCellValue(CS.getCourseName());
row.createCell((short) 3).setCellValue(CS.getCourseCode()); row.createCell((short) 4).setCellValue(CS.getTeacherName());
row.createCell((short) 5).setCellValue(CS.getTeacherCode());
row.createCell((short) 6).setCellValue(CS.getRoomName());
row.createCell((short) 7).setCellValue(CS.getStartWeek()); row.createCell((short) 8).setCellValue(CS.getEndWeek());
row.createCell((short) 9).setCellValue(CS.getOddWeekOrNot());
row.createCell((short) 10).setCellValue(CS.getWeekName());
row.createCell((short) 11).setCellValue(CS.getCellTimeName());
}
// 第六步,将文件存到指定位置
try {
FileSystemView fsv = FileSystemView.getFileSystemView(); Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime); String deskPath = fsv.getHomeDirectory().toString() + "/导入失败的课表数据"
+ dateString + ".xls";
FileOutputStream fout = new FileOutputStream(deskPath);
wb.write(fout);
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
}</span>

三、总结

在导出到excel表的方法中,可以使用Map将表头设置和赋值设置进一步进行封装,可以方便以后重复调用。(PS:在做项目的过程中,底层已经有封装好的导出excel表的方法,然后就懒了,没有继续封装,直接写实现了)

然后,在做这个导出的过程中,再一次遇到了如果用户需要更改保存路径怎么办的问题,在底层封装的方法中,也是默认保存到用户下载路径,但是我想还是有这个需求的,找个时间,一定要把这个问题解决了。在今日开讲中遇到了一次,在这里又遇到了一次,这是不解决睡不安稳的节奏。

【ITOO 1】将List数据导出Excel表的更多相关文章

  1. PHP将数据导出Excel表中(投机型)

    1.简介 如何利用最简单粗糙暴力的方法将数据写入Excel文件中呢? 因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出. 在htm ...

  2. 将数据 导出excel表格式

    我的考试完提交生成的数据 这是我的考试题类型 //导出调查评议的数据 public function diaocha(){ $xlsName = '表格形式 调查评议 信息'; $xlsTitle = ...

  3. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  4. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  5. DateGridew导出Excel表+常见错误提示

    在敲机房收费系统的时候,显示数据的时候需要将DateGridew 中的数据导出进Excel表.DateGridew导出Excel表是比较常见的,当然导出Excel表有很多种方法,下面是个人认为比较容易 ...

  6. 【asp.net】将GridView数据导出Excel

    概要: 中午睡了一会,醒来的时候看到老师叫我去办公室,需求是这样的,把excel表中的每个同学,判断图片目录中是否有对应的照片(图片的名字用的学号或身份证号码) 没有对应图片的学生记录,存入自己的数据 ...

  7. Java使用POI实现数据导出excel报表

    Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...

  8. 传参导出Excel表乱码问题解决方法

    业务场景 先描述一下业务场景,要实现的功能是通过搜索框填写参数,然后点击按钮搜索数据,将搜索框的查询参数获取,附加在链接后面,调导Excel表接口,然后实现导出Excel功能.其实做导Excel表功能 ...

  9. 微擎 人人商城 导出excel表分析

    在 数据处理上 ,有很多时候需要导出excel表  来当报表, 等 ,  php  人人商城导出报表过程简单分析 在导出时候发现 ca('statistics.order.export'); 出于好奇 ...

随机推荐

  1. Redis应用案例,查找某个值的范围(转)

    本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...

  2. SQLServer分页存储过程

    创建存贮过程: Create PROCEDURE [dbo].[UP_GetRecordByPage]@tblName   varchar(255),       -- 表名@fldName varc ...

  3. [运维-服务器 – 2A] – nginx下绑定域名

    这个篇文章今天(2016-01-21)才有幸写了,因为自己对nginx部署以前没玩过,还得感谢下我们数字化的总经理.在这里记录下自己成长的经验,与遇到的问题. 因为自己的域名是在万网上买的,解析无法直 ...

  4. 监控页面所有 ajax请求

    监控所有ajax请求: 你是不是有遇到这样的问题:页面发起两个ajax请求,希望它们都成功以后,再做一个动作? 很容易想到的解决方案是,等其中一个结束以后,再发起另外一个,这个过程用回调函数来完成.  ...

  5. reduce的数目到底和哪些因素有关

      reduce的数目到底和哪些因素有关 1.我们知道map的数量和文件数.文件大小.块大小.以及split大小有关,而reduce的数量跟哪些因素有关呢? 设置mapred.tasktracker. ...

  6. Input gameobject vector3 c#

    Input类中的常用方法 bool w=Input.GetKey(KeyCode.W);//检测是否按下键盘W Input.GetKeyDown(KeyCode.W);//表示检测按下时 Input. ...

  7. ylbtech-Unitity-CS:AnonymousDelegates

    ylbtech-Unitity-CS:AnonymousDelegates 1.A,效果图返回顶部   1.B,源代码返回顶部 1.B.1, using System; using System.Co ...

  8. laravel 删除一条migration后要执行composer命令

    Laravel 删除一条migration 字数29 阅读30 评论0 喜欢0 如果迁移已经执行,先回滚php artisan migrate:rollback 然后删除迁移文件,运行composer ...

  9. 表空间、Schema和用户

    源地址:http://www.cnblogs.com/kevinanni/p/3688921.html

  10. jsp标准标签库

    抄袭自:http://www.cnblogs.com/hongten/archive/2011/05/14/2046005.html JSP标准标签库     Pass by xkk ,and aut ...