pom.xml添加依赖

@RestController
@RequestMapping(value = "/excel")
public class ExpImpExcelController { // 导出user表
@GetMapping(value = "/export/user")
public String getUser(HttpServletResponse response) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook();
// 给sheet起个名字
HSSFSheet sheet = workbook.createSheet("用户表"); // 创建表头
createTitle(workbook, sheet); // 准备数据,写入sheet
List<User> userList = new ArrayList<User>();
User user1 = new User("", "zhangsan1", "张三1", new Date());
User user2 = new User("", "zhangsan2", "张三1", new Date());
User user3 = new User("", "zhangsan3", "张三1", new Date());
userList.add(user1);
userList.add(user2);
userList.add(user3);
List<User> rows = userList;
// 设置日期格式
HSSFCellStyle style = workbook.createCellStyle();
HSSFDataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat("yyyy年MM月dd日"));
// 新增数据行,并且设置单元格数据
int rowNum = ;
for (User user : rows) {
HSSFRow row = sheet.createRow(rowNum);
row.createCell().setCellValue(user.getId());
row.createCell().setCellValue(user.getUserName());
row.createCell().setCellValue(user.getNickName());
HSSFCell cell = row.createCell();
cell.setCellValue(user.getCreateTime());
cell.setCellStyle(style);
rowNum++;
} // 生成excel文件
String fileName = "用户表.xls";
buildExcelFile(fileName, workbook); // 浏览器下载excel
downloadExcelFile(fileName, workbook, response); return "";
} // 创建表头
private void createTitle(HSSFWorkbook workbook, HSSFSheet sheet) {
HSSFRow row = sheet.createRow();
// 设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
sheet.setColumnWidth(, * );
sheet.setColumnWidth(, * ); // 设置为居中加粗
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setFont(font); HSSFCell cell;
cell = row.createCell();
cell.setCellValue("ID");
cell.setCellStyle(style); cell = row.createCell();
cell.setCellValue("用户名");
cell.setCellStyle(style); cell = row.createCell();
cell.setCellValue("昵称");
cell.setCellStyle(style); cell = row.createCell();
cell.setCellValue("创建时间");
cell.setCellStyle(style);
} // 生成excel文件
protected void buildExcelFile(String filename, HSSFWorkbook workbook) throws Exception {
FileOutputStream fos = new FileOutputStream(filename);
workbook.write(fos);
fos.flush();
fos.close();
} // 浏览器下载excel
protected void downloadExcelFile(String filename, HSSFWorkbook workbook, HttpServletResponse response)
throws Exception {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
} //导入excel
@PostMapping("/import/user")
public boolean addUser(@RequestParam("file") MultipartFile file) {
boolean a = false;
String fileName = file.getOriginalFilename();
try {
a = batchImport(fileName, file);
} catch (Exception e) {
e.printStackTrace();
}
return a;
} public boolean batchImport(String fileName, MultipartFile file) throws Exception {
Workbook wb = null;
try {
List<User> userList = new ArrayList<User>();
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
throw new RuntimeException("上传文件格式不正确");
}
boolean isExcel2003 = true;
if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
isExcel2003 = false;
}
InputStream is = file.getInputStream(); if (isExcel2003) {
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
}
Sheet sheet = wb.getSheetAt();
if (sheet == null) {
throw new RuntimeException("sheet页内容为空");
}
User user;
// 从第二行开始解析单元格
for (int r = ; r <= sheet.getLastRowNum(); r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
user = new User();
// excel 单元格类型
// CELL_TYPE_NUMERIC 数值型 0
// CELL_TYPE_STRING 字符串型 1
// CELL_TYPE_FORMULA 公式型 2
// CELL_TYPE_BLANK 空值 3
// CELL_TYPE_BOOLEAN 布尔型 4
// CELL_TYPE_ERROR 错误 5 if (row.getCell().getCellType() != Cell.CELL_TYPE_STRING) {
throw new RuntimeException("导入失败(第" + (r + ) + "行,ID请设为文本格式)");
}
String id = row.getCell().getStringCellValue();
if (id == null || id.isEmpty()) {
throw new RuntimeException("导入失败(第" + (r + ) + "行,ID未填写)");
} String userName = row.getCell().getStringCellValue();
if (userName == null || userName.isEmpty()) {
throw new RuntimeException("导入失败(第" + (r + ) + "行,用户名未填写)");
} String nickName = row.getCell().getStringCellValue();
if (nickName == null || nickName.isEmpty()) {
throw new RuntimeException("导入失败(第" + (r + ) + "行,昵称未填写)");
} Date createTime;
if (row.getCell().getCellType() != ) {
throw new RuntimeException("导入失败(第" + (r + ) + "行,创建日期格式不正确或未填写)");
} else {
createTime = row.getCell().getDateCellValue();
}
user.setId(id);
user.setUserName(userName);
user.setNickName(nickName);
user.setCreateTime(createTime);
userList.add(user);
}
} finally {
wb.close();
} return true;
}
}
public class User {

    private String id;

    private String userName;

    private String nickName;

    private Date createTime;

}

excel文件导出和导入的更多相关文章

  1. php excel文件导出之phpExcel扩展库

    php Excel  文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...

  2. Excel接口导出,导入数据库(.Net)

    public ActionResult TestExcel(string filePath) { return View(); } /// <summary> /// 根据Excel列类型 ...

  3. SQL语句:把Excel文件中数据导入SQL数据库中的方法

    1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...

  4. loadrunner实现excel文件导出操作

    项目中需要对“商品信息”进行查询及导出,但是loadrunner并不能录制到“保存”这一操作. 项目介绍:flex+Http协议: 不能录制的原因: 在我们点击了“导出”按钮后,服务端已经生成一份我们 ...

  5. Ado.Net小练习01(数据库文件导出,导入)

    数据库文件导出主要程序: <span style="font-family: Arial, Helvetica, sans-serif;"><span style ...

  6. 使用npoi插件将excel文件导出

    大致流程:前端使用URL地址的方式跳转到action后返回file类型数据 js: window.location.href = '/Home/index?Id=' + id 后台代码: /// &l ...

  7. php excel文件导出之二 图像导出

    PHP文件导出 之图像 和 文字同一时候导出 事实上之前写了个php文件导出.跟这个极为相似,由于项目须要对图像进行导出.查询一番.又写了一个, 这个能实现图像的导出(仅仅能是本地图像,不能使用远程图 ...

  8. Jmeter_实现Excel文件导出到本地

    一般而言,对于页面的“导出”操作,主要经历如下两个操作:①根据数据库的内容,将文件导出到应用服务器上:②将服务器上的文件下载到本地电脑: Jmeter同LoadRunner类似,只能记录服务端与客户端 ...

  9. oracle dmp文件导出与导入

    ORACLE 10g导入 ORACLE 11g 一.expdp.sh导出dmp文件export PATH=$PATH:$HOME/binexport ORACLE_BASE=/oracleexport ...

随机推荐

  1. LeetCode 685. Redundant Connection II

    原题链接在这里:https://leetcode.com/problems/redundant-connection-ii/ 题目: In this problem, a rooted tree is ...

  2. IIS 站点配置文件

    IIS 站点配置文件  C:/Windows/System32/inetsrv/config/applicationHost.config 配置文件示例: <system.application ...

  3. CF1098E Fedya the Potter

    CF1098E Fedya the Potter 题意:有一个序列\(A\). 对所有\(1\leq l\leq r\leq |A|\),将\(\gcd_{i=l}^{r}A_i\)加入\(B\)中. ...

  4. P4936 题解

    \(\text{Update}\)(2019.10.05): 递推公式推法更详细: 通项公式更新详细版: 单位矩阵的推法更加详细. 特别鸣谢 @Smallbasic 苣佬,是他教会了我推递推公式和通项 ...

  5. c++ Size capacity Resize reserve shrink_to_fit

  6. Cocos CreatorUI系统下

    若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理. 请点赞!因为你们的赞同/鼓励是我写作的最大动力! 欢迎关注达叔小生的简书! 这是一个有质量 ...

  7. 关于集成通用mapper的Mybatis代码生成器产生的model类注解

    主要是@Table.@Id.@GeneratedValue.@Column 4个注解 这四个注解都来自javax.persistence包,是Java持久层规范,单纯的Mybatis并不认识这四个注解 ...

  8. 通过phoenix导入数据到hbase出错记录

    解决方法1 错误如下 -- ::, [hconnection-0x7b9e01aa-shared--pool11069-t114734] WARN org.apache.hadoop.hbase.ip ...

  9. Java中在时间戳计算的过程中遇到的数据溢出问题

    背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...

  10. 移动端 - adb shell常用命令

    一.文件操作相关命令 //进入设备 adb shell //进入指定目录"/data/local/tmp" cd /data/local/tmp //查看目录 ls //进入根目录 ...