Java 实现数据库数据 导入 导出成Excel文档的功能
1.创建导入 导出工具类,写入其导入和导出方法
导出成外部文件:
public static ResponseEntity<byte[]> emp2Excel(List<Emp> list) {
//1. 创建一个 Excel 文档
HSSFWorkbook workbook = new HSSFWorkbook();
//2. 创建文档摘要
workbook.createInformationProperties();
//3. 获取并配置文档信息
DocumentSummaryInformation docInfo = workbook.getDocumentSummaryInformation();
//文档类别
docInfo.setCategory("员工信息");
//文档管理员
docInfo.setManager("javaboy");
//设置公司信息
docInfo.setCompany("www.javaboy.org");
//4. 获取文档摘要信息
SummaryInformation summInfo = workbook.getSummaryInformation();
//文档标题
summInfo.setTitle("员工信息表");
//文档作者
summInfo.setAuthor("javaboy");
// 文档备注
summInfo.setComments("本文档由 javaboy 提供");
//5. 创建样式
//创建标题行的样式
HSSFCellStyle headerStyle = workbook.createCellStyle();
headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
HSSFCellStyle dateCellStyle = workbook.createCellStyle();
dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
HSSFSheet sheet = workbook.createSheet("员工信息表");
//设置列的宽度
sheet.setColumnWidth(0, 5 * 256);
sheet.setColumnWidth(1, 12 * 256);
sheet.setColumnWidth(2, 10 * 256);
sheet.setColumnWidth(3, 5 * 256);
//6. 创建标题行
HSSFRow r0 = sheet.createRow(0);
HSSFCell c0 = r0.createCell(0);
c0.setCellValue("编号");
c0.setCellStyle(headerStyle);
HSSFCell c1 = r0.createCell(1);
c1.setCellStyle(headerStyle);
c1.setCellValue("姓名");
HSSFCell c2 = r0.createCell(2);
c2.setCellStyle(headerStyle);
c2.setCellValue("性别");
HSSFCell c3 = r0.createCell(3);
c3.setCellStyle(headerStyle);
c3.setCellValue("薪水");
for (int i = 0; i < list.size(); i++) {
Emp emp = list.get(i);
HSSFRow row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(emp.getEid());
row.createCell(1).setCellValue(emp.getEname());
row.createCell(2).setCellValue(emp.getSex());
row.createCell(3).setCellValue(emp.getSalary());
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
HttpHeaders headers = new HttpHeaders();
try {
headers.setContentDispositionFormData("attachment", new String("员工表2.xls".getBytes("UTF-8"), "ISO-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
workbook.write(baos);
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);
}
外部文件导入:
public static List<Emp> excel2Emp(MultipartFile file, List<Nation> allNations, List<Politicsstatus> allPoliticsstatus, List<Department> allDepartments, List<Position> allPositions, List<JobLevel> allJobLevels) {
List<Emp> list = new ArrayList<>();
Emp emp = null;
try {
//1. 创建一个 workbook 对象
HSSFWorkbook workbook = new HSSFWorkbook(file.getInputStream());
//2. 获取 workbook 中表单的数量
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
//3. 获取表单
HSSFSheet sheet = workbook.getSheetAt(i);
//4. 获取表单中的行数
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < physicalNumberOfRows; j++) {
//5. 跳过标题行
if (j == 0) {
continue;//跳过标题行
}
//6. 获取行
HSSFRow row = sheet.getRow(j);
if (row == null) {
continue;//防止数据中间有空行
}
//7. 获取列数
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
emp = new Emp();
for (int k = 0; k < physicalNumberOfCells; k++) {
HSSFCell cell = row.getCell(k);
switch (cell.getCellType()) {
case STRING:
String cellValue = cell.getStringCellValue();
switch (k) {
case 0:
emp.setEid(Integer.valueOf(cellValue));
break;
case 1:
emp.setEname(cellValue);
break;
case 2:
emp.setSex(cellValue);
break;
case 3:
emp.setSalary(Double.valueOf(cellValue));
break;
}
break;
default:
break;
}
}
list.add(emp);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
注意导出时,row.createCell(0).setCellValue();中只能为字符串,否则报空指针异常,加一个 +"" 就行,注意从数据库中查找的列要和表中的对应,不能少于表中的数据,不然表中数据为Null
注意:其中导入数据时,遇到整形或者日期Date类型的时候需要注意参数的类型设置,如下:
switch (cell.getCellType()) {
case STRING:
String cellValue = cell.getStringCellValue();
switch (k) {
case 0:
employeeec.setId(Integer.valueOf(cellValue));
break;
case 2:
employeeec.setEname(cellValue);
break;
case 3:
employeeec.setDepname(cellValue);
break;
case 4:
employeeec.setPosname(cellValue);
break;
case 6:
employeeec.setEcreason(cellValue);
break;
case 9:
employeeec.setRemark(cellValue);
break;
}
break;
default:
switch (k) {
case 1:
cell.setCellType(CellType.STRING);
employeeec.setEid(Integer.parseInt(cell.getStringCellValue()));
break;
case 7:
cell.setCellType(CellType.STRING);
employeeec.setEcpoint(Integer.parseInt(cell.getStringCellValue()));
break;
case 8:
//整形,先把表格类型转成String,然后在设置
cell.setCellType(CellType.STRING);
employeeec.setEctype(Integer.parseInt(cell.getStringCellValue()));
break;
case 5:
//日期
employeeec.setEcdate(cell.getDateCellValue());
break;
}
break;
}
注意值为 "null" 的情况
switch (cell.getCellType()) {
case STRING:
String cellValue = cell.getStringCellValue();
switch (k) {
case 0:
emp.setEid(Integer.valueOf(cellValue));
break;
case 1:
emp.setEname(cellValue);
break;
case 2:
emp.setSex(cellValue);
break;
case 3:
cell.setCellType(CellType.STRING);
if (cell.getStringCellValue().equals("null")){
emp.setSalary(0.0);
break;
}
emp.setSalary(Double.parseDouble(cell.getStringCellValue()));
break;
}
break;
default:
break;
}
下面直接看运行效果 :
导入
Java 实现数据库数据 导入 导出成Excel文档的功能相关推荐
- JAVA实现数据库数据导入/导出到Excel(POI)
原文地址为: JAVA实现数据库数据导入/导出到Excel(POI) 准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/ ...
- java基于easypoi实现对导出的excel文档加密
**项目背景 随着项目日新月异的变化,对数据的安全性也越来越高,特别是政府类型的项目,数据安全往往是非常重要的,最近项目中导出的文件被要求需要密码才能打开,所以写下这篇文章,特此记录一下. 文章目录 ...
- Java案例:数据表转换成XML文档
将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值. 1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...
- 蓝的成长记——追逐DBA(3):古董上操作,数据导入导出成了问题
蓝的成长记--追逐DBA(3):古董上操作,数据导入导出成了问题 ***************************************声明************************** ...
- oracle数据库数据导入导出步骤(入门)
oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/i ...
- cmd imp导入dmp文件_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤...
正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...
- oracle临时表经常被锁_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤
正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...
- oracle数据库数据导入导出步骤
oracle数据库数据导入导出步骤(基础) 前言: Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先 ...
- oracle 加载数据戽_oracle数据库数据导入导出步骤(入门)
oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...
最新文章
- Java实现网页截屏功能(基于phantomJs)
- 视频+课件| 室内动态变化场景中的相机重定位(CVPR2021)
- 如何把一个程序中 Edit 中的文本赋给另一个程序的 Edit ? - 回复 Disk_ 的问题
- 加强linux操作系统DNS服务安全
- 无法删除当前已连接的用户处理办法
- syslog 向内存中缓存_漫谈缓存(Cache)、大规模芯片系统的存储层次结构优化以及开源仿真工具ZSim...
- ajax跨域解决方案
- c调用易语言串口,易语言串口API源码
- Android StateFlow详解
- Mysql8.0可以使用解压版 这个比较快 好像现在都是解压版了
- vue-cli-service不是内部或外部命令,也不是可运行的程序
- MyBatis的CURD
- 计算机辅助数控编程交互图形,第六章 计算机辅助数控编程.ppt
- 删除Docker出现: device or resource busy错误
- 数仓知识03:“自上而下“建设数仓和“自下而上“建设数仓的差异
- BZOJ 1582: [Usaco2009 Hol]Holiday Painting 节日画画
- 微信小程序拼团功能页面展示
- 梦幻西游手游经验任务链计算机,梦幻西游手游跑环任务详解 刷经验利器
- 一维搜索方法/黄金分割法(附matlab代码)
- 【MySQL高可用】MySQL高可用之MGR部署
热门文章
- 深度解析Java游戏服务器开发
- 教你一步解决大部分wallpaper engine使用时卡顿、鼠标延迟的问题
- 转屏动画 - 安卓R
- $().each() 与 $.each()区别
- 也跟风玩一玩CH552
- 视频剪辑工具,批量给视频添加上下图片
- Linux C报错: /usr/bin/ld: cannot find -ldb
- 产品三维模型在线展示
- matlab不是内部或外部命令_如何解决Telnet不是内部或外部命令(电脑提示telnet不是内部或外部命令...
- gke下载_我们如何在GKE上升级Kubernetes