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. STM32L4R9使用HAL库调试IIC注意事项

    STM32使用Cubemx生成的代码中,用到IIC的驱动,但是始终不能读写,因此使用逻辑分析仪,发现原本地址为0x58的写成了0x20,因此肯定是地址错了.因此,总结如下: 1.需要逻辑分析仪分析II ...

  2. Win如何查看某个端口被谁占用并停掉

    第一步在我们的电脑上按win+R键打开运行,输入cmd, 第二步进去命令提示符之后,输入“netstat -ano”,按回车键,查出所有端口,如下图所示: 第三步如果我们想找8089端口,输入nets ...

  3. php for循环遍历索引数组

    遍历二字,从字面解释就是一个接一个全读访问一次,显示出来. 因为for循环是一个单纯的计数型循环,而索引数组的下标为整型的数值.因此,我们可以通过for循环来遍历索引数组. 我们知道索引数组下标为整型 ...

  4. git create remote branch (五)

    admin@PC-panzidong MINGW64 ~/WebstormProjects/backEndServer (master) 查看本地分支信息$ git branch* master ad ...

  5. WinDbg常用命令系列---!heap

    !heap 简介 !heap扩展显示堆使用信息.控制堆管理器中的断点.检测泄漏的堆块.搜索堆块或显示页堆信息.此扩展支持段堆和NT堆.使用!heap没有参数列出所有堆及其类型的堆. 使用形式 !hea ...

  6. P4279 【[SHOI2008]小约翰的游戏】

    我怎么什么都不会啊\(QAQ\)博弈论怎么和期望一样玄学啊\(QAQ\) 我们分几种情况讨论: \(Case1\):只有一堆且为1,那么后手胜利 \(Case2\):每一堆都是1,那么只需要判断奇偶性 ...

  7. 利用Python进行数据分析【第二版】【高清中文版英文版源代码】

    如果被河蟹请回复我更新链接   这是我花钱弄的,免费分享给大家.没有密码,直接可以观看!   希望大家不要拿去后再做收费分享   如果好用,请给个赞好嘛~~~   1.中文pdf 链接:https:/ ...

  8. PHP全栈学习笔记33

    javascript能做什么? 语句与注解,标识符,字面量,变量命名规范 JavaScript中的数据类型,其它类型如何转为数据型,操作符 字符方法,数组方法,函数与对象,函数表达式,变量作用域,对象 ...

  9. 数据结构---公交线路提示系统(Java后台+excel表格+web前端)

     系统大致流程: index.jsp输入站名(点击“出示站点信息”,跳转list.jsp读取表格):后台通过站名获得id:getIdbyname(String name)将id反馈至dijkstra( ...

  10. linux定时执行shell脚本

    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...