POIUtil
package com.util.poi;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
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.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.sang.bean.Department;
import org.sang.bean.Employee;
import org.sang.bean.JobLevel;
import org.sang.bean.Nation;
import org.sang.bean.PoliticsStatus;
import org.sang.bean.Position;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
/**
* POI工具类
*/
public class PoiUtils {
public static ResponseEntity<byte[]> exportEmp2Excel(List<Employee> emps) {
HttpHeaders headers = null;
ByteArrayOutputStream baos = null;
try {
//1.创建Excel文档
HSSFWorkbook workbook = new HSSFWorkbook();
//2.创建文档摘要
workbook.createInformationProperties();
//3.获取文档信息,并配置
DocumentSummaryInformation dsi = workbook.getDocumentSummaryInformation();
//3.1文档类别
dsi.setCategory("员工信息");
//3.2设置文档管理员
dsi.setManager("江南一点雨");
//3.3设置组织机构
dsi.setCompany("XXX集团");
//4.获取摘要信息并配置
SummaryInformation si = workbook.getSummaryInformation();
//4.1设置文档主题
si.setSubject("员工信息表");
//4.2.设置文档标题
si.setTitle("员工信息");
//4.3 设置文档作者
si.setAuthor("XXX集团");
//4.4设置文档备注
si.setComments("备注信息暂无");
//创建Excel表单
HSSFSheet sheet = workbook.createSheet("XXX集团员工信息表");
//创建日期显示格式
HSSFCellStyle dateCellStyle = workbook.createCellStyle();
dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
//创建标题的显示样式
HSSFCellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//定义列的宽度
sheet.setColumnWidth(0, 5 * 256);
sheet.setColumnWidth(1, 12 * 256);
sheet.setColumnWidth(2, 10 * 256);
sheet.setColumnWidth(3, 5 * 256);
sheet.setColumnWidth(4, 12 * 256);
sheet.setColumnWidth(5, 20 * 256);
sheet.setColumnWidth(6, 10 * 256);
sheet.setColumnWidth(7, 10 * 256);
sheet.setColumnWidth(8, 16 * 256);
sheet.setColumnWidth(9, 12 * 256);
sheet.setColumnWidth(10, 15 * 256);
sheet.setColumnWidth(11, 20 * 256);
sheet.setColumnWidth(12, 16 * 256);
sheet.setColumnWidth(13, 14 * 256);
sheet.setColumnWidth(14, 14 * 256);
sheet.setColumnWidth(15, 12 * 256);
sheet.setColumnWidth(16, 8 * 256);
sheet.setColumnWidth(17, 16 * 256);
sheet.setColumnWidth(18, 20 * 256);
sheet.setColumnWidth(19, 12 * 256);
sheet.setColumnWidth(20, 8 * 256);
sheet.setColumnWidth(21, 25 * 256);
sheet.setColumnWidth(22, 14 * 256);
sheet.setColumnWidth(23, 12 * 256);
sheet.setColumnWidth(24, 12 * 256);
//5.设置表头
HSSFRow headerRow = sheet.createRow(0);
HSSFCell cell0 = headerRow.createCell(0);
cell0.setCellValue("编号");
cell0.setCellStyle(headerStyle);
HSSFCell cell1 = headerRow.createCell(1);
cell1.setCellValue("姓名");
cell1.setCellStyle(headerStyle);
HSSFCell cell2 = headerRow.createCell(2);
cell2.setCellValue("工号");
cell2.setCellStyle(headerStyle);
HSSFCell cell3 = headerRow.createCell(3);
cell3.setCellValue("性别");
cell3.setCellStyle(headerStyle);
HSSFCell cell4 = headerRow.createCell(4);
cell4.setCellValue("出生日期");
cell4.setCellStyle(headerStyle);
HSSFCell cell5 = headerRow.createCell(5);
cell5.setCellValue("身份证号码");
cell5.setCellStyle(headerStyle);
HSSFCell cell6 = headerRow.createCell(6);
cell6.setCellValue("婚姻状况");
cell6.setCellStyle(headerStyle);
HSSFCell cell7 = headerRow.createCell(7);
cell7.setCellValue("民族");
cell7.setCellStyle(headerStyle);
HSSFCell cell8 = headerRow.createCell(8);
cell8.setCellValue("籍贯");
cell8.setCellStyle(headerStyle);
HSSFCell cell9 = headerRow.createCell(9);
cell9.setCellValue("政治面貌");
cell9.setCellStyle(headerStyle);
HSSFCell cell10 = headerRow.createCell(10);
cell10.setCellValue("电话号码");
cell10.setCellStyle(headerStyle);
HSSFCell cell11 = headerRow.createCell(11);
cell11.setCellValue("联系地址");
cell11.setCellStyle(headerStyle);
HSSFCell cell12 = headerRow.createCell(12);
cell12.setCellValue("所属部门");
cell12.setCellStyle(headerStyle);
HSSFCell cell13 = headerRow.createCell(13);
cell13.setCellValue("职称");
cell13.setCellStyle(headerStyle);
HSSFCell cell14 = headerRow.createCell(14);
cell14.setCellValue("职位");
cell14.setCellStyle(headerStyle);
HSSFCell cell15 = headerRow.createCell(15);
cell15.setCellValue("聘用形式");
cell15.setCellStyle(headerStyle);
HSSFCell cell16 = headerRow.createCell(16);
cell16.setCellValue("最高学历");
cell16.setCellStyle(headerStyle);
HSSFCell cell17 = headerRow.createCell(17);
cell17.setCellValue("专业");
cell17.setCellStyle(headerStyle);
HSSFCell cell18 = headerRow.createCell(18);
cell18.setCellValue("毕业院校");
cell18.setCellStyle(headerStyle);
HSSFCell cell19 = headerRow.createCell(19);
cell19.setCellValue("入职日期");
cell19.setCellStyle(headerStyle);
HSSFCell cell20 = headerRow.createCell(20);
cell20.setCellValue("在职状态");
cell20.setCellStyle(headerStyle);
HSSFCell cell21 = headerRow.createCell(21);
cell21.setCellValue("邮箱");
cell21.setCellStyle(headerStyle);
HSSFCell cell22 = headerRow.createCell(22);
cell22.setCellValue("合同期限(年)");
cell22.setCellStyle(headerStyle);
HSSFCell cell23 = headerRow.createCell(23);
cell23.setCellValue("合同起始日期");
cell23.setCellStyle(headerStyle);
HSSFCell cell24 = headerRow.createCell(24);
cell24.setCellValue("合同终止日期");
cell24.setCellStyle(headerStyle);
//6.装数据
for (int i = 0; i < emps.size(); i++) {
HSSFRow row = sheet.createRow(i + 1);
Employee emp = emps.get(i);
row.createCell(0).setCellValue(emp.getId());
row.createCell(1).setCellValue(emp.getName());
row.createCell(2).setCellValue(emp.getWorkID());
row.createCell(3).setCellValue(emp.getGender());
HSSFCell birthdayCell = row.createCell(4);
birthdayCell.setCellValue(emp.getBirthday());
birthdayCell.setCellStyle(dateCellStyle);
row.createCell(5).setCellValue(emp.getIdCard());
row.createCell(6).setCellValue(emp.getWedlock());
row.createCell(7).setCellValue(emp.getNation().getName());
row.createCell(8).setCellValue(emp.getNativePlace());
row.createCell(9).setCellValue(emp.getPoliticsStatus().getName());
row.createCell(10).setCellValue(emp.getPhone());
row.createCell(11).setCellValue(emp.getAddress());
row.createCell(12).setCellValue(emp.getDepartment().getName());
row.createCell(13).setCellValue(emp.getJobLevel().getName());
row.createCell(14).setCellValue(emp.getPosition().getName());
row.createCell(15).setCellValue(emp.getEngageForm());
row.createCell(16).setCellValue(emp.getTiptopDegree());
row.createCell(17).setCellValue(emp.getSpecialty());
row.createCell(18).setCellValue(emp.getSchool());
HSSFCell beginDateCell = row.createCell(19);
beginDateCell.setCellValue(emp.getBeginDate());
beginDateCell.setCellStyle(dateCellStyle);
row.createCell(20).setCellValue(emp.getWorkState());
row.createCell(21).setCellValue(emp.getEmail());
row.createCell(22).setCellValue(emp.getContractTerm());
HSSFCell beginContractCell = row.createCell(23);
beginContractCell.setCellValue(emp.getBeginContract());
beginContractCell.setCellStyle(dateCellStyle);
HSSFCell endContractCell = row.createCell(24);
endContractCell.setCellValue(emp.getEndContract());
endContractCell.setCellStyle(dateCellStyle);
}
headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment",
new String("员工表.xls".getBytes("UTF-8"), "iso-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
baos = new ByteArrayOutputStream();
workbook.write(baos);
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);
}
public static List<Employee> importEmp2List(MultipartFile file,
List<Nation> allNations,
List<PoliticsStatus> allPolitics,
List<Department> allDeps,
List<Position> allPos,
List<JobLevel> allJobLevels) {
List<Employee> emps = new ArrayList<>();
try {
HSSFWorkbook workbook =
new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
HSSFSheet sheet = workbook.getSheetAt(i);
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
Employee employee;
for (int j = 0; j < physicalNumberOfRows; j++) {
if (j == 0) {
continue;//标题行
}
HSSFRow row = sheet.getRow(j);
if (row == null) {
continue;//没数据
}
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
employee = new Employee();
for (int k = 0; k < physicalNumberOfCells; k++) {
HSSFCell cell = row.getCell(k);
switch (cell.getCellTypeEnum()) {
case STRING: {
String cellValue = cell.getStringCellValue();
if (cellValue == null) {
cellValue = "";
}
switch (k) {
case 1:
employee.setName(cellValue);
break;
case 2:
employee.setWorkID(cellValue);
break;
case 3:
employee.setGender(cellValue);
break;
case 5:
employee.setIdCard(cellValue);
break;
case 6:
employee.setWedlock(cellValue);
break;
case 7:
int nationIndex = allNations.indexOf(new Nation(cellValue));
employee.setNationId(allNations.get(nationIndex).getId());
break;
case 8:
employee.setNativePlace(cellValue);
break;
case 9:
int psIndex = allPolitics.indexOf(new PoliticsStatus(cellValue));
employee.setPoliticId(allPolitics.get(psIndex).getId());
break;
case 10:
employee.setPhone(cellValue);
break;
case 11:
employee.setAddress(cellValue);
break;
case 12:
int depIndex = allDeps.indexOf(new Department(cellValue));
employee.setDepartmentId(allDeps.get(depIndex).getId());
break;
case 13:
int jlIndex = allJobLevels.indexOf(new JobLevel(cellValue));
employee.setJobLevelId(allJobLevels.get(jlIndex).getId());
break;
case 14:
int posIndex = allPos.indexOf(new Position(cellValue));
employee.setPosId(allPos.get(posIndex).getId());
break;
case 15:
employee.setEngageForm(cellValue);
break;
case 16:
employee.setTiptopDegree(cellValue);
break;
case 17:
employee.setSpecialty(cellValue);
break;
case 18:
employee.setSchool(cellValue);
break;
case 19:
case 20:
employee.setWorkState(cellValue);
break;
case 21:
employee.setEmail(cellValue);
break;
}
}
break;
default: {
switch (k) {
case 4:
employee.setBirthday(cell.getDateCellValue());
break;
case 19:
employee.setBeginDate(cell.getDateCellValue());
break;
case 22:
employee.setContractTerm(cell.getNumericCellValue());
break;
case 23:
employee.setBeginContract(cell.getDateCellValue());
break;
case 24:
employee.setEndContract(cell.getDateCellValue());
break;
}
}
break;
}
}
emps.add(employee);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return emps;
}
}
POIUtil的更多相关文章
- 自己写的POIUtil,主要解决从不同的HSSFWorkbook复制sheet以及根据单元格插入图片等
复制sheet的原始代码网上找的,但是小问题很多,然后自己动手改了一下: 根据单元格信息动态插入图片,如果单元格有文字,图片的位置会在文字之后,如果同样的位置已有图片则会往下插入. import or ...
- Apache POI 工具类 [ PoiUtil ]
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml ...
- excel工具类
excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...
- 基于jdk1.7实现的excel导出工具类
通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...
- flex+java将数据库里的数据导出到指定目录下excel表里(poi)
数据写入到excel中采用的是Apache POI: //java后台的一个工具类(该工具类适用于为不同字段添加,方便) /* 下面这个方法是将list转换为Excel工作表的 */ public s ...
- 使用POI把Word Excel转为HTML
此方法是针对Office2003的,但是word中如果有图片,图片能够解析出来但是HTML文件中不显示.也不支持excel中的图片解析. 所需jar包如下如下: 1:PoiUtil.java pack ...
- 使用ocupload和POI一键上传Excel并解析导入数据库
使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...
- JAVA代码实现嵌套层级列表,POI导出嵌套层级列表
要实现POI导出EXCEL形如 --A1(LV1) ----B1(LV2) ----B2(LV2) ------C1(LV3) ------C2(LV3) ----B3(LV2) --A1(LV1)
- JXLS 2.4.0系列教程(五)——更进一步的应用和页面边距bug修复
注:本文代码建立于前面写的代码.不过不看也不要紧. 前面的文章把JXLS 2.4.0 的基本使用写了一遍,现在讲讲一些更进一步的使用方法.我只写一些我用到过的方法,更多的高级使用方法请参考官网. ht ...
随机推荐
- centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm的文件系统集群
centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm文件系统集群 一.环境准备 服务器列表: ansible server : 192. ...
- Javascript中Json对象与Json字符串互相转换方法汇总(4种转换方式)
1.Json对象转Json字符串 JSON.stringify(obj); 2.Json字符串传Json对象 JSON.parse(str);//第一种 $.parseJSON(str);//第二种, ...
- urllib处理包的简单使用
我们可以使用urllib.request.urlopen()这个接口函数就可以打开一个网站,读取打印信息 你可以现在终端使用python from urllib import request if _ ...
- PYTHON-文件处理-练习
## 一.实现用户注册功能# 思路:# 用户输入用户名.密码# 将用户输入的内容按照固定的格式,比如:egon:123,存入文件# 可以往一个文件中重复注册新的用户名和密码# 附加:# 1.对输入的用 ...
- VSCode配置python调试环境
VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在VSCode市场中安装Python插件 * 4.在 ...
- poj2528贴海报,,
对于区间段的离散化需要注意一下,和点离散化不同 离散后如何识别一段区间还是一段区间,而不是两个顶点,就是如果两个点的距离大于1,就往离散的数据里插入一个中间值,即用三个点来表示一段区间 /* 离散化长 ...
- poj1511,线段树扫描线面积
经典题,线段树扫描线其实类似区间更新,一般的做法是想象一根扫描线从上扫到下或者从左扫到右,本题的做法是从上扫到下 只要扫到了一根水平线,就将其更新到线段树对应区间中,区间和它的子区间是独立更新的 #i ...
- .NetCore下使用Prometheus实现系统监控和警报 (六)进阶Grafana集成自定义收集指标
Prometheus中包含了很多收集指标,那么我们怎来在Grafana中来使用呢? 接下来我们还是以之前自定义的来演示如图:我们在Prometheus中已经可以看到这个之前我们自定义的类型了 关于Gr ...
- hdu 1217 汇率 Floyd
题意:给几个国家,然后给这些国家之间的汇率.判断能否通过这些汇率差进行套利交易. Floyd的算法可以求出任意两点间的最短路径,最后比较本国与本国的汇率差,如果大于1,则可以.否则不可以. 有向图 一 ...
- jQuery如何退出each循环 和如何退出function函数
1.在函数内部使用return false是跳出function; 2.在each的回调函数中使用return false,是跳出each循环;return true 进入下一个循环: 3.break ...