项目场景:

项目场景:Excel的导入与导出


环境配置:

  1. 创建项目,导入jar包,创建包,创建类,创建接口(不知道操作的可以看之前的文章)
  2. 配置web.xml
 <!-- 配置spring监听 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置springmvc --><servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 配置编码 --><filter><filter-name>encoding-filter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encoding-filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
  1. 配置spring-mvc.xml
 <!--  扫描具体的包路径 --><context:component-scan base-package="com.lwy.controller"></context:component-scan><!-- 开启springmvc注解扫描 自动开启(扫描)处理器适配器和处理器映射器 --><mvc:annotation-driven/><!-- 注入转换器  --><!-- <bean name="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">  <property name="converters"><set><bean class="com.lwy.converter.DateConvertor"></bean></set> </property></bean> --><!-- 加载静态资源--><mvc:default-servlet-handler/><!-- 配置springmvc上传工具 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 通过属性来规范上传文件的信息 -->          <property name="defaultEncoding" value="UTF-8"></property><!-- 上傳文件的最大的字節數  --><property name="maxUploadSize" value="5000000"></property>        </bean><!-- 视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/"></property><!-- 后缀 --><property name="suffix" value=".jsp"></property></bean>
  1. 配置applicationContext.xml
 <!-- 开启spring扫描 --><context:component-scan base-package="com.lwy"></context:component-scan><!--引入jdbc--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!-- 配置hibernate --><!-- 配置sessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- 1、配置数据库链接 --><property name="dataSource" ref="myDataSource"></property><!-- 配置hibernate相关内容 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 加载映射 --><!-- private String[] packagesToScan; --><property name="packagesToScan"><list><value>com.lwy.pojo</value></list></property></bean><!-- 2、配置数据库链接信息 --><bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property><property name="driverClass" value="${jdbc.driver}"></property><property name="jdbcUrl" value="${jdbc.url}"></property></bean><!-- 注册事物管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 注册事物通知 --><tx:advice id="myAdvice" transaction-manager="transactionManager"><tx:attributes><!-- name : 方法名 可以使用匹配符isolation : 隔离级别propagation : 事物的传播的行为read-only : 只读--><tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED"  rollback-for="Exception"/><tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/></tx:attributes></tx:advice><aop:config><aop:pointcut expression="execution(* com.lwy.service.*.*(..))" id="pointcut"/><!-- 顾问 : 切面的另一种实现 --><aop:advisor advice-ref="myAdvice" pointcut-ref="pointcut"/></aop:config>
  1. hibernate的相关配置,在上图

  2. 抽取的jdbc——jdbc.properties

jdbc.user=root
jdbc.password=11111
jdbc.url=jdbc:mysql://127.0.0.1:3306/day3_09_db?characterEncoding=utf8
jdbc.driver=com.mysql.jdbc.Driver

创建POI导入:

步骤:

(1)判断当前excel版本(截取后缀), 创建对象(将当前文件封装进来)
(2)获取sheet页
(3)获取行(row)
(4)获取单元格(cell)

代码示例:

//引入自定义的数据类型@Autowiredprivate BookService bookService;//poi导入@RequestMapping("uploadExcel")public String uploadExcel(MultipartFile excelFile) throws IOException{//获取文件大小,如果为0不解析内容不上传if (excelFile.getSize() <= 0) {return "list";}//判断当前Excel的版本//获取文件的名称String filename = excelFile.getOriginalFilename();//截取后缀String suffix = filename.substring(filename.lastIndexOf(".")+1);//定义公共接收的父类的workbookWorkbook workbook = null;//定义文件输入流InputStream inputStream = excelFile.getInputStream();//创建集合存放数据List<Object[]> list = new ArrayList<Object[]>();//判断如果后缀是xlsx则调用xlsx的方法if (suffix.equals("xlsx")) {//文件输入流workbook = new XSSFWorkbook(inputStream); //07 最大行104000  最大列16000}else if (suffix.equals("xls")) {workbook = new HSSFWorkbook(inputStream); //03  60000  256}//获取sheet页Sheet sheet = workbook.getSheetAt(0);//如果为空,不需要上传if (sheet == null) {return "list";}//获取最后一行的下标int lastnum = sheet.getLastRowNum();//有行数了循环获取  如果略过表头,i不能从0开始for (int i = 1; i < lastnum; i++) {//获取行Row row = sheet.getRow(i);//通过行获取列//获取开始单元格位置从0开始short firstCellNum = row.getFirstCellNum();//获取最后一个单元格配置short lastCellNum = row.getLastCellNum();//判断如果两者相等说明当前行没有数据,跳出继续下一次循环if (firstCellNum == lastCellNum) {continue;}//定义数组,存放单元格的值Object[] o = new Object[lastCellNum];//继续循环for (int j = firstCellNum; j < lastCellNum; j++) {//获取单元格Cell cell = row.getCell(j);//借助工具类,因为poi转换的时候,Excel中的为数字解析的时候不一样Object object = ExcelUtil.parseExcel(cell);//放到数组中o[j] = object;//   System.out.println(object);}//将获取到的数据保存到list集合list.add(o);}

POI导出:

步骤:

(1)创建workBook, 对应一个Excel文件
(2)在workbook中创建一个sheet
(3)设置样式
(4)在表格中创建表头(row cell)
(5)将查询出的结果存放到表格中
(6)将workbook通过io写入到某个文件夹中

代码示例:

//   poi导出@RequestMapping("exportExcel")public String exportExcel(){//    1.创建WorkBookWorkbook workbook = new XSSFWorkbook();//  2.在WorkBook里面创建一个sheet表Sheet sheet = workbook.createSheet();// 3.设置样式CellStyle style = workbook.createCellStyle();//设置居中style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置上下居中style.setAlignment(HSSFCellStyle.VERTICAL_CENTER);//创建字体Font font = workbook.createFont();//设置字体颜色font.setColor(IndexedColors.RED.index);//设置字号font.setFontHeightInPoints((short)20);//设置是否为斜体font.setItalic(true);//将设置的字体样式放入到样式中stylestyle.setFont(font);//    第一个单元格Row row = sheet.createRow(0);// 4.创建表头cellString[] title = {"作者","日期","书名"};//每次循环创建行,每行给他一个valuefor (int i = 0; i < title.length; i++) {//创建单元格Cell cell = row.createCell(i);//每一行都给赋值cell.setCellValue(title[i]);//加上样式cell.setCellStyle(style);}//   5.将查询的结果放到表格中List<Book> blist = bookService.getInfo();for (int i = 0; i < blist.size(); i++) {Book book = blist.get(i);//从第二行开始Row row2 = sheet.createRow(i + 1);Cell cell = row2.createCell(0);cell.setCellValue(book.getBookAutor());Cell cell2 = row2.createCell(1);if (book.getBookDate() != null) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");cell2.setCellValue(sdf.format(book.getBookDate()));}row2.createCell(2).setCellValue(book.getBookName());}// 6.将Workbook通过io写出到某个文件中try {FileOutputStream fis = new FileOutputStream("E:/upload/book/"+UUID.randomUUID() + ".xlsx");workbook.write(fis);fis.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "list";}

目录结构

  • 目录结构

  • 创建dao

 void addBookInfo(Book b);List<Book> getInfo();
  • 创建dao层实现类
@Repository
public class BookDaoImpl implements BookDao {@Autowiredprivate SessionFactory sessionFactory;//POI写入到实体类中@Overridepublic void addBookInfo(Book b) {// 创建sessionSession session = sessionFactory.getCurrentSession();session.save(b);}//写出@Overridepublic List<Book> getInfo() {// TODO Auto-generated method stubSession session = sessionFactory.getCurrentSession();Query query = session.createQuery("from Book");return query.list();}}
  • 创建service的实现类
@Autowiredprivate BookDao bookDao;@Overridepublic void addBookInfo(Book b) {// TODO Auto-generated method stubbookDao.addBookInfo(b);}@Overridepublic List<Book> getInfo() {// TODO Auto-generated method stubreturn bookDao.getInfo();}
  • 创建service
 void addBookInfo(Book b);List<Book> getInfo();
  • 上传界面
<form action="<%=path%>/poi/uploadExcel" method="post" enctype="multipart/form-data"><input type="file" name="excelFile"><input type="submit" value="提交">
</form>
  • 下载界面
<form action="<%=path%>/poi/exportExcel"><input type="submit" value="下载">
</form>

jar包提取码:
链接:https://pan.baidu.com/s/17amUuKr8Kzg3qLCf4oyGSw
提取码:ykom
复制这段内容后打开百度网盘手机App,操作更方便哦

Excel的导入与导出相关推荐

  1. java如何导入和导出ex_SpringBoot中关于Excel的导入和导出

    前言 由于在最近的项目中使用Excel导入和导出较为频繁,以此篇博客作为记录,方便日后查阅.本文前台页面将使用layui,来演示对Excel文件导入和导出的效果.本文代码已上传至我的gitHub,欢迎 ...

  2. SpringBoot通过WorkBook快速实现对Excel的导入和导出(包括数据校验)

    之前转载过一篇对Excel基本操作相关的文章,这篇文章的浏览量迅速飙升,以至于在我博客的热门文章中排到了第三的位置,不过那篇转载的文章实用性差并且讲解不是很清晰,所以打算趁着今天休息,写一篇关于Spr ...

  3. 使用easyexcel进行excel的导入和导出(web)

    使用easyexcel进行excel的导入和导出(web) 前言:使用springboot,mybatis,excel3.x.x,通用mapper.本文主要演示怎么使用easyexcel,因此先展示效 ...

  4. SpringBoot+Vue+POI实现Excel的导入与导出

    文章目录 前言 POI中文操作API文档 导入Excel文件 导出Excel 总结 前言 继上一篇Excel的模板下载后,就此更新企业开发中常常需要使用到的Excel的导入与导出.Excel的解析需要 ...

  5. mysql excel导入导出_Mysql数据库的EXCEL格式导入与导出

    在mysql中对于EXCEL格式导入与导出我们有最简单的办法就是使用phpmyadmin来实现了,当然也可以使用mysql命令来实现,具体如下. 一.导入 (1).选取要导入的数据块(多处一列) (2 ...

  6. Excel文件导入,导出

    前端Excel文件导入,导出 Excel文件导入,导出 功能快捷键 文件导入 文件解析 如何改变文本的样式 exportExcel.js 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 ...

  7. Java如何实现Excel的导入与导出?

    Java如何实现Excel的导入与导出? 一.核心依赖及简要介绍 1.POI是什么? Apache POI - the Java API for Microsoft Documents,顾名思义,Ap ...

  8. Vue实现在线编辑excel、导入、导出

    文章目录 概要 整体架构流程 小结 概要 Vue实现在线编辑excel.导入.导出 整体架构流程 luckysheet文档地址 exceljs文档地址 1.npm安装依赖 npm i exceljs ...

  9. Java代码实现excel的导入和导出

    文章目录 简介 常用方法 导出Excel 导入Excel 简介 目前比较常用的实现Java导入.导出Excel的技术有:Jakarta POI.freemarker和Java Excel,在此只对Ja ...

最新文章

  1. Java学习总结:28
  2. 任正非:要感谢特朗普,他一吓唬,治好了华为人的富裕病,都努力工作了
  3. Treap与fhq_Treap模板(支持内存回收)
  4. Apache Mahout基于商品的协同过滤算法流程分析
  5. 在图像中绘制基本形状和文字
  6. npm run dev/build/serve
  7. 一张图30分钟带你入门python-大数据时代来了!神级程序员一张图帮你梳理Python脉络,快速入门...
  8. 获取文件夹内的文件数目
  9. 心形图案爱心代码编程c语言
  10. python入门视频教程
  11. 梯度,散度,旋度的概念
  12. java阿里云图片检测同/异步sdk调用详解
  13. android自定义素材拼图,众望所归 美图秀秀Android拼图隆重上线
  14. [Vani有约会]雨天的尾巴
  15. ThingWorx中的Date操作
  16. 【论文阅读】Long-term Temporal Convolutions for Action Recognition
  17. 数据结构之线性表(手绘版)
  18. 多元线性回归matlab代码例题_matlab多元线性回归
  19. 爱码物联二维码营销,开启精准营销新模式!
  20. 瞪羚优化算法Gazelle optimization algorithm附matlab代码

热门文章

  1. wps怎么把ppt里的字体一起保存_PPT基础教程!看懂少走弯路!
  2. linux提示桌面正在处理文件,linux系统下桌面配置文件.desktop的几个小问题
  3. asp写入mysql拿shell_mysql误删数据快速恢复
  4. android 3.x,Android Studio3.x的坑(三)
  5. CRS磁盘force dismount引起的RAC节点宕机故障
  6. PostgreSQL的安装和启动方法大全
  7. 12.2 新特性:锁信息获取之在线删除索引
  8. 鸿蒙轻内核源码分析:虚拟文件系统 VFS
  9. Hive on Spark和Spark sql on Hive,你能分的清楚么
  10. 敏捷开发你必须知道的7件事