package com.qifangli.edumanage.util;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtils {
static final short borderpx = 1;
/**
* 导出excel表格
* @param head
* @param body
* @return
*/
public static HSSFWorkbook expExcel(List<String> head, List<List<String>> body) {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell= null;
HSSFCellStyle cellStyle = workbook.createCellStyle();
setBorderStyle(cellStyle, borderpx);
cellStyle.setFont(setFontStyle(workbook, "黑体", (short) 14));
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
for (int i = 0; i<head.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(head.get(i));
cell.setCellStyle(cellStyle);
}
HSSFCellStyle cellStyle2 = workbook.createCellStyle();
setBorderStyle(cellStyle2, borderpx);
cellStyle2.setFont(setFontStyle(workbook, "宋体", (short) 12));
cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
for (int i = 0; i < body.size(); i++) {
row = sheet.createRow(i + 1);
List<String> paramList = body.get(i);
for (int p = 0; p < paramList.size(); p++) {
cell = row.createCell(p);
cell.setCellValue(paramList.get(p));
cell.setCellStyle(cellStyle2);
}
}
for (int i = 0, isize = head.size(); i < isize; i++) {
sheet.autoSizeColumn(i);
}
return workbook;
}
/**
* 文件输出
* @param workbook 填充好的workbook
* @param path 存放的位置
*/
public static void outFile(HSSFWorkbook workbook,String path,HttpServletResponse response) {
SimpleDateFormat fdate=new SimpleDateFormat("yyyyMMdd-HH点mm分");
path = path.substring(0, path.lastIndexOf(".")) + fdate.format(new Date()) + path.substring(path.lastIndexOf("."));
OutputStream os=null;
File file = null;
try {
file = new File(path);
String filename = file.getName();
os = new FileOutputStream(file);
response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(filename, "UTF-8"));
os= new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
workbook.write(os);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
os.flush();
os.close();
System.gc();
System.out.println(file.delete());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 设置字体样式
* @param workbook 工作簿
* @param name 字体类型
* @param height 字体大小
* @return HSSFFont
*/
private static HSSFFont setFontStyle(HSSFWorkbook workbook, String name, short height) {
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints(height);
font.setFontName(name);
return font;
}
/**
* 设置单元格样式
* @param cellStyle 工作簿
* @param border border样式
*/
private static void setBorderStyle(HSSFCellStyle cellStyle, short border) {
cellStyle.setBorderBottom(border); // 下边框
cellStyle.setBorderLeft(border);// 左边框
cellStyle.setBorderTop(border);// 上边框
cellStyle.setBorderRight(border);// 右边框
}
/*****************文件输入相关************************/
/**
* @Title: createWorkbook
* @Description: 判断excel文件后缀名,生成不同的workbook
* @param @param is
* @param @param excelFileName
* @param @return
* @param @throws IOException
* @return Workbook
* @throws
*/
public static Workbook createWorkbook(InputStream is, String excelFileName) throws IOException{
if (excelFileName.endsWith(".xls")) {
return new HSSFWorkbook(is);
}else if (excelFileName.endsWith(".xlsx")) {
return new XSSFWorkbook(is);
}
return null;
}
/**
* @Title: importDataFromExcel
* @Description: 将sheet中的数据保存到list中,
* 1、调用此方法时,vo的属性个数必须和excel文件每行数据的列数相同且一一对应,vo的所有属性都为String
* 2、在action调用此方法时,需声明
* private File excelFile;上传的文件
* private String excelFileName;原始文件的文件名
* 3、页面的file控件name需对应File的文件名
* @param @param vo javaBean
* @param @param is 输入流
* @param @param excelFileName
* @param @return
* @return List<Object>
* @throws
*/
public static List<Object> importDataFromExcel(Object vo,InputStream is,String excelFileName){
List<Object> list = new ArrayList<Object>();
try {
//创建工作簿
Workbook workbook = createWorkbook(is, excelFileName);
//创建工作表sheet
Sheet sheet = getSheet(workbook, 0);
//获取sheet中数据的行数
int rows = sheet.getPhysicalNumberOfRows();
//获取表头单元格个数
int cells = sheet.getRow(0).getPhysicalNumberOfCells();
//利用反射,给JavaBean的属性进行赋值
Field[] fields = vo.getClass().getDeclaredFields();
for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据
vo = vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});
Row row = sheet.getRow(i);
int index = 0;
while (index < cells) {
Cell cell = row.getCell(index);
if (null == cell) {
cell = row.createCell(index);
}
cell.setCellType(Cell.CELL_TYPE_STRING);
String value = null == cell.getStringCellValue()?"":cell.getStringCellValue();
Field field = fields[index];
String fieldName = field.getName();
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
Method setMethod = vo.getClass().getMethod(methodName, new Class[]{String.class});
setMethod.invoke(vo, new Object[]{value});
index++;
}
if (isHasValues(vo)) {//判断对象属性是否有值
list.add(vo);
vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});//重新创建一个vo对象
}
}
} catch (Exception e) {
e.printStackTrace();
//如果读取错误则返回空List
list = new ArrayList<>();
//logger.error(e);
}finally{
try {
is.close();//关闭流
} catch (Exception e2) {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
【springboot项目源码】教务管理系统.rar (179个子文件)
mvnw.cmd 6KB
global.css 2KB
index.html 613B
favicon.ico 4KB
maven-wrapper.jar 50KB
ExcelUtils.java 9KB
VerifyCodeUtils.java 8KB
AdminArrangeController.java 7KB
AdminStuController.java 6KB
TeacherController.java 6KB
StudentController.java 6KB
AdminTeaController.java 5KB
PwdController.java 5KB
LoginController.java 5KB
AdminCrsController.java 5KB
MavenWrapperDownloader.java 5KB
AdminAuthorizeController.java 4KB
MyRealm.java 4KB
StudentServiceImpl.java 4KB
LogDBAppender.java 3KB
TelController.java 3KB
CourseArrange.java 3KB
SmsUtil.java 3KB
CourseArrangeServiceImpl.java 3KB
Student.java 3KB
ShiroUserFilter.java 3KB
Teacher.java 3KB
JWTUtil.java 3KB
TeacherServiceImpl.java 2KB
DptController.java 2KB
CourseArrangeMapper.java 2KB
TermTableController.java 2KB
CourseServiceImpl.java 2KB
ShiroConfig.java 2KB
RoomController.java 2KB
ACAFilter.java 2KB
ScoreMapper.java 2KB
Course.java 2KB
EdumanageApplication.java 1KB
Score.java 1KB
LoggerUtil.java 1KB
TeacherMapper.java 1KB
WeekTimeUtil.java 1KB
StudentScore.java 1KB
ScoreServiceImpl.java 1KB
Role.java 1KB
RoleServiceImpl.java 1KB
UnauthorizedurlController.java 1KB
ResultEnum.java 1KB
StudentService.java 934B
TermServiceImpl.java 893B
Result.java 814B
SpotServiceImpl.java 796B
ResultUtils.java 792B
RolePermissionServiceImpl.java 779B
TeacherService.java 735B
CourseArrangeService.java 730B
StudentMapper.java 717B
Permission.java 706B
DepartmentServiceImpl.java 686B
ClassAndGrade.java 682B
NoPermissionException.java 651B
PermissionServiceImpl.java 590B
RoleMapper.java 578B
ScoreService.java 578B
CourseMapper.java 563B
ClassAndGradeServiceImpl.java 537B
RolePermission.java 534B
Spot.java 517B
Term.java 486B
JWTToken.java 461B
SpotMapper.java 444B
Duration5Util.java 430B
CourseService.java 420B
RoleService.java 389B
TermMapper.java 388B
Department.java 368B
StudentScoreMapper.java 363B
DepartmentMapper.java 346B
PermissionMapper.java 322B
RolePermissionMapper.java 289B
SpotService.java 288B
TermService.java 253B
DepartmentService.java 235B
RolePermissionService.java 234B
EdumanageApplicationTests.java 227B
PermissionService.java 208B
ClassAndGradeMapper.java 197B
ClassAndGradeService.java 141B
JWTFilter.java 71B
back.jpg 126KB
back2.jpg 65KB
back1.jpg 25KB
mock.js 42KB
Blob.js 7KB
index.js 6KB
Export2Excel.js 4KB
http.js 2KB
main.js 1KB
roomOptions.js 920B
共 179 条
- 1
- 2
资源评论
浅浅d笑
- 粉丝: 5
- 资源: 208
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功