1.导入依赖

    <!-- 解析表格 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>

2.spring-mvc.xml配置

 <!-- 声明文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传的最大大小(字节)的限制 -->
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>

3.controller

  导入(即上传)

  @RequestMapping("/uploadregion.do")
public String uplodRegion(MultipartFile myfile,HttpServletRequest request) throws IOException {
//1.存储上传的文件
//1.1通过myfile获得文件名称
String oldname=myfile.getOriginalFilename();
//1.2判断oldname中是否有路径部分,如果有进行截取
if(oldname.indexOf("/")>-1){
oldname = oldname.substring(oldname.lastIndexOf("/")+1);
}
String newname= UUID.randomUUID().toString()+"_"+oldname;
//2.解析上传的文件,解析出数据
String savepath= request.getServletContext().getRealPath("/")+"upload\\";
File file=new File(savepath);
if(!file.isDirectory()){
file.mkdir();
}
//3.根据解析出来的数据进行存储
File savefile=new File(savepath,newname);
try {
myfile.transferTo(savefile);
} catch (IOException e) {
e.printStackTrace();
}
String filePath=savepath+newname;
HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(filePath));
HSSFSheet sheet=workbook.getSheetAt(0);//第一个工作簿
int i=0;
List<Region> regions=new ArrayList<>();
Region region=null;
for (Row cells : sheet) {
if(i==0){
i=1;
continue;
}
region=new Region();
String id=cells.getCell(0).getStringCellValue();
String province=cells.getCell(1).getStringCellValue();
String city=cells.getCell(2).getStringCellValue();
String district=cells.getCell(3).getStringCellValue();
String postcode=cells.getCell(4).getStringCellValue();
province=province.substring(0,province.length()-1);
city=city.substring(0,city.length()-1);
district=district.substring(0,district.length()-1);
String info=province+city+district;
String[] headByString= PinYin4jUtils.getHeadByString(info);
String shortcode=String.join("",headByString);
//城市编码
String citycode=PinYin4jUtils.hanziToPinyin(city,"");
region.setId(id);
region.setCity(city);
region.setCitycode(citycode);
region.setDistrict(district);
region.setPostcode(postcode);
region.setProvince(province);
region.setShortcode(shortcode);
regions.add(region);
}
regionService.addAll(regions);
return null;
}

 导出(即下载)

  @RequestMapping("/outregion.do")
public void out(HttpServletRequest request, HttpServletResponse response) throws IOException {
List<Region> list=regionService.findAll(null);
HSSFWorkbook workbook=new HSSFWorkbook();
HSSFSheet sheet=workbook.createSheet("分区数据");
HSSFRow row=sheet.createRow(0);
row.createCell(0).setCellValue("区域编号");
row.createCell(1).setCellValue("省份");
row.createCell(2).setCellValue("城市");
row.createCell(3).setCellValue("区域");
row.createCell(4).setCellValue("邮编");
for (Region region:list){
HSSFRow datarow=sheet.createRow(sheet.getLastRowNum()+1);
datarow.createCell(0).setCellValue(region.getId());
datarow.createCell(1).setCellValue(region.getProvince());
datarow.createCell(2).setCellValue(region.getCity());
datarow.createCell(3).setCellValue(region.getDistrict());
datarow.createCell(4).setCellValue(region.getPostcode());
}
String filename="区域数据.xls";
//请求类型
String contentType=request.getSession().getServletContext().getMimeType(filename);
//输出流
ServletOutputStream out=response.getOutputStream();
//响应类型
response.setContentType(contentType);
//获取用户代理
String agent=request.getHeader("User-Agent");
//使用工具类进行解析
filename= FileUtils.encodeDownloadFilename(filename,agent);
//设置头文件信息
response.setHeader("content-disposition","attachment;filename="+filename);
workbook.write(out);
}

2020-06-30 pol实现execl导入导出的更多相关文章

  1. MVC execl 导入导出

    MVC execl 导入导出 <input id="xls" name="xls" type="file" style="w ...

  2. 基于NPOI的Execl导入导出例子

    源地址:http://bbs.csdn.net/topics/390830774

  3. 180620-mysql之数据库导入导出

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...

  4. 【Java EE 学习 30】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】

    一.闪回 1.可能的误操作 (1)错误的删除了记录 (2)错误的删除了表 (3)查询历史记录 (4)撤销已经提交了的事务. 2.对应着以上四种类型的误操作,有四种闪回类型 (1)闪回表:将表回退到过去 ...

  5. 导入导出Excel

    最近需要频繁的使用导入导出,各么,又不想使用ms的PIA,在4.0以下,存在版本兼容的问题. 于是网上查找了很久,找到两款开源的excel组件. 1.CSharpJExcel,这是JExcel的.ne ...

  6. .NET中导入导出Excel总结

    前一段时间,做了Excle的导入和导出,在此记录开发思路及技术要点,以便在今后开发中参考.                                                        ...

  7. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

  8. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出

    目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...

  9. exp/expdp 与 imp/impdp命令导入导出数据库详解

    一.exp命令导出数据库 如何使exp的帮助以不同的字符集显示:set nls_lang=simplified chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文 ...

  10. sqoop1的安装以及数据导入导出测试

    下载 wget http://mirror.bit.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 解压 tar -zxf ...

随机推荐

  1. Yii源码阅读笔记(二十七)

    Theme 类,即一个应用的主题,主要通过替换路径实现主题的应用,里边的方法为获取根路径和根链接,以及应用主题的方法: namespace yii\base; use Yii; use yii\hel ...

  2. 原生javascript Ajax

    代码 1. IE5 ,IE6 使用ActiveXObject对象,   其余现代浏览器都支持XMLHttpRequest对象: function ajaxObject(){ var xmlhttp; ...

  3. Vue.js自定义指令的用法与实例

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...

  4. vs 2015 rdlc报表绑定datagridview中的数据

    这几天一直想要实现rdlc报表绑定datagridview中的数据,始终在虚拟表向rdlc报表绑定这一步上出错.今天从下午4点到七点四十一直在尝试.最终还是实现了,最然并不知所以然,这个问题还是以后在 ...

  5. C#进阶--WebApi异常处理机制

    其实对于C#异常处理大家都不陌生,但是对于在WeiApi上的异常处理实际上也和传统异常处理区别不大,但是却经过封装可以让异常更加友好,https://docs.microsoft.com/en-us/ ...

  6. r.js合并实践

    项目中用到require.js做生产时模块开发,但上线要合并压缩,幸好它配套有r.js.下面就其用法说明一下. 首先建一个目录,里面的结构如下: require.js可以到r.js项目下载 r.js可 ...

  7. Lintcode376-Binary Tree Path Sum-Easy

    376. Binary Tree Path Sum Given a binary tree, find all paths that sum of the nodes in the path equa ...

  8. day python 010 函数(1)

    一 函数 定义 : def () 函数是对功能或者动作的封装 def yue (): # 形参列表 # print("拿出手机") # print("打开陌陌" ...

  9. Emac

    https://emacs-china.org/ 启动 console模式的emacs,$emacs -nw 学习参考: 1)<21天精通emacs> 2)Emacs常用命令简集. 3)& ...

  10. Python程序员之面试必回习题

    写在前面 近日恰逢学生毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答]. 期待 ...