excel文件导出和导入
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文件导出和导入的更多相关文章
- php excel文件导出之phpExcel扩展库
php Excel 文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...
- Excel接口导出,导入数据库(.Net)
public ActionResult TestExcel(string filePath) { return View(); } /// <summary> /// 根据Excel列类型 ...
- SQL语句:把Excel文件中数据导入SQL数据库中的方法
1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...
- loadrunner实现excel文件导出操作
项目中需要对“商品信息”进行查询及导出,但是loadrunner并不能录制到“保存”这一操作. 项目介绍:flex+Http协议: 不能录制的原因: 在我们点击了“导出”按钮后,服务端已经生成一份我们 ...
- Ado.Net小练习01(数据库文件导出,导入)
数据库文件导出主要程序: <span style="font-family: Arial, Helvetica, sans-serif;"><span style ...
- 使用npoi插件将excel文件导出
大致流程:前端使用URL地址的方式跳转到action后返回file类型数据 js: window.location.href = '/Home/index?Id=' + id 后台代码: /// &l ...
- php excel文件导出之二 图像导出
PHP文件导出 之图像 和 文字同一时候导出 事实上之前写了个php文件导出.跟这个极为相似,由于项目须要对图像进行导出.查询一番.又写了一个, 这个能实现图像的导出(仅仅能是本地图像,不能使用远程图 ...
- Jmeter_实现Excel文件导出到本地
一般而言,对于页面的“导出”操作,主要经历如下两个操作:①根据数据库的内容,将文件导出到应用服务器上:②将服务器上的文件下载到本地电脑: Jmeter同LoadRunner类似,只能记录服务端与客户端 ...
- oracle dmp文件导出与导入
ORACLE 10g导入 ORACLE 11g 一.expdp.sh导出dmp文件export PATH=$PATH:$HOME/binexport ORACLE_BASE=/oracleexport ...
随机推荐
- 按键精灵PC端脚本
定义变量的时候不需要定义类型 ,由于是易语言,变量名可以是中文 文本路径 = "C:\Users\Administrator\Desktop\1.txt"//改成自己的文本路径 T ...
- [NOIp 2018]all
Description 题库链接: Day1 T1 铺设道路 Day1 T2 货币系统 Day1 T3 赛道修建 Day2 T1 旅行 Day2 T2 填数游戏 Day2 T3 保卫王国 Soluti ...
- [ML] Tensorflow.js + Image segmentPerson
<!DOCTYPE html> <html> <head> <title>Parcel Sandbox</title> <meta c ...
- AJax和JQ的结合使用
第一种经典模式 <%-- Created by IntelliJ IDEA. User: 60590 Date: 2019/12/4 Time: 16:08 To change this tem ...
- 使用window.localStorage,window.localStorage记录点击次数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 51Nod 1769 Clarke and math2
51Nod 1769 Clarke and math2 http://www.51nod.com/Challenge/Problem.html#!#problemId=1769 要算的是\(G=F*I ...
- mysql round()函数以及convert()函数,保留n位小数
mysql> ); +----------------+ | round() | +----------------+ | 2.23 | +----------------+ row in se ...
- 微信小程序 wxs的简单应用
Demo地址:微信小程序wxs的简单应用 案例分析 张三.李四.王五,各自分别都有数量不等的车,现在需要列表显示名字及他们拥有车的数量, list数据结构如下,当我们使用wx:for进行显示时,发现个 ...
- Nginx压测和并发预估
一.Nginx并发预估 预估算法:{(?G)*1024-system}/请求大小 (?G):表示内存大小1024:表示内存容量标准进制system:表示系统和服务占用的额外内存和需要预留的内存请求大小 ...
- 【Excel】多条件查找
例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C ...