Java:实现文件批量导入导出实践(兼容xls,xlsx)
ninehua 2025-07-19 21:33 18 浏览
作者:小卖铺的老爷爷
转载:
cnblogs.com/laoyeye/p/6938889.html
1、介绍
java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。
目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出。另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了。
2、POI使用详解
2.1 什么是Apache POI?
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2.2 POI的jar包导入
本次讲解使用maven工程,jar包版本使用poi-3.14和poi-ooxml-3.14。目前最新的版本是3.16。因为3.15以后相关api有更新,部分操作可能不一样,大家注意下。
<!-- poi的包 3.15版本后单元格类型获取方式有调整 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
2.3 POI的API讲解
2.3.1 结构
HSSF - 提供读写Microsoft Excel格式档案的功能。XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。HWPF - 提供读写Microsoft Word格式档案的功能。HSLF - 提供读写Microsoft PowerPoint格式档案的功能。HDGF - 提供读写Microsoft Visio格式档案的功能。
2.3.2 对象
本文主要介绍HSSF和XSSF两种组件,简单的讲HSSF用来操作Office 2007版本前excel.xls文件,XSSF用来操作Office 2007版本后的excel.xlsx文件,注意二者的后缀是不一样的。
HSSF在
org.apache.poi.hssf.usermodel包中。它实现了Workbook 接口,用于Excel文件中的.xls格式
常用组件:
HSSFWorkbook : excel的文档对象HSSFSheet : excel的表单HSSFRow : excel的行HSSFCell : excel的格子单元HSSFFont : excel字体HSSFDataFormat: 日期格式HSSFHeader : sheet头HSSFFooter : sheet尾(只有打印的时候才能看到效果)
样式:
HSSFCellStyle : cell样式
辅助操作包括:
HSSFDateUtil : 日期HSSFPrintSetup : 打印HSSFErrorConstants : 错误信息表
XSSF在org.apache.xssf.usemodel包,并实现Workbook接口,用于Excel文件中的.xlsx格式
常用组件:
XSSFWorkbook : excel的文档对象XSSFSheet: excel的表单XSSFRow: excel的行XSSFCell: excel的格子单元XSSFFont: excel字体XSSFDataFormat : 日期格式
和HSSF类似;
2.3.3 两个组件共同的字段类型描述
其实两个组件就是针对excel的两种格式,大部分的操作都是相同的。
2.3.4 操作步骤
以HSSF为例,XSSF操作相同。
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象,用行对象得到Cell对象
4、对Cell对象读写。
3、代码操作
3.1 效果图
惯例,贴代码前先看效果图
Excel文件两种格式各一个:
代码结构:
导入后:(我导入了两遍,没做校验)
导出效果:
3.2 代码详解
这里我以Spring+SpringMVC+Mybatis为基础,扩展:SpringBoot+Mybatis多模块(module)项目搭建教程
Controller:
Service
3.3 导出文件api补充
大家可以看到上面service的代码只是最基本的导出。
在实际应用中导出的Excel文件往往需要阅读和打印的,这就需要对输出的Excel文档进行排版和样式的设置,主要操作有合并单元格、设置单元格样式、设置字体样式等。
3.3.1 单元格合并
使用HSSFSheet的addMergedRegion()方法
public int addMergedRegion(CellRangeAddress region)
参数CellRangeAddress 表示合并的区域,构造方法如下:依次表示起始行,截至行,起始列, 截至列
CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
3.3.2 设置单元格的行高和列宽
HSSFSheet sheet=wb.createSheet();
sheet.setDefaultRowHeightInPoints(10);//设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽
//设置指定列的列宽,256 * 50这种写法是因为width参数单位是单个字符的256分之一
sheet.setColumnWidth(cell.getColumnIndex(), 256 * 50);
3.3.3 设置单元格样式
1、创建HSSFCellStyle
HSSFCellStyle cellStyle=wkb.createCellStyle()
2、设置样式
// 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle
cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
/* 设置单元格的填充方式,以及前景颜色和背景颜色
三点注意:
1.如果需要前景颜色或背景颜色,一定要指定填充方式,两者顺序无所谓;
2.如果同时存在前景颜色和背景颜色,前景颜色的设置要写在前面;
3.前景颜色不是字体颜色。
*/
//设置填充方式(填充图案)
cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);
//设置前景色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
//设置背景颜色
cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);
// 设置单元格底部的边框及其样式和颜色
// 这里仅设置了底边边框,左边框、右边框和顶边框同理可设
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);
cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);
//设置日期型数据的显示样式
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
3、将样式应用于单元格
cell.setCellStyle(cellStyle);
//将样式应用到行,但有些样式只对单元格起作用
row.setRowStyle(cellStyle);
3.3.4设置字体样式
1、创建HSSFFont对象(调用HSSFWorkbook 的createFont方法)
HSSFWorkbook wb=new HSSFWorkbook();
HSSFFont fontStyle=wb.createFont();
HSSFWorkbook wb=new HSSFWorkbook ();
2、设置字体各种样式
//设置字体样式
fontStyle.setFontName("宋体");
//设置字体高度
fontStyle.setFontHeightInPoints((short)20);
//设置字体颜色
font.setColor(HSSFColor.BLUE.index);
//设置粗体
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//设置斜体
font.setItalic(true);
//设置下划线
font.setUnderline(HSSFFont.U_SINGLE);
3、将字体设置到单元格样式
//字体也是单元格格式的一部分,所以从属于HSSFCellStyle
// 将字体对象赋值给单元格样式对象
cellStyle.setFont(font);
// 将单元格样式应用于单元格
cell.setCellStyle(cellStyle);
大家可以看出用poi导出文件还是比较麻烦的,等下次在为大家介绍下irport的方法。
导出的api基本上就是这些,最后也希望上文对大家能有所帮助。
源码地址:
https://github.com/allanzhuo/myport.git
相关推荐
- Codota 是一款优秀的 AI 代码自动完成工具,提高开发效率
-
简介Codota是一款优秀的AI代码自动完成工具,可以帮助我们极大的提高开发效率。官网:https://www.codota.com/支持主流语言:Java,Javascript,TypeS...
- 英雄联盟主播洞主大胆尝试DOTA2,新版本的魅力与新手友好体验
-
在最近的一次直播中,知名《英雄联盟》主播洞主偷偷打开了《DOTA2》,为观众展示了这款游戏的7.33新版本的魅力。从新手教学到天梯环境的改善,该次直播深入地探讨了为何《DOTA2》现在对于《英雄联盟》...
- 人类击败OpenAI守住编程冠军,10小时激战两次反超,AI最后关头功亏一篑
-
10小时激战!人类最后关头实现超越,获得编程总决赛冠军~而原本始终保持领先优势的OpenAI,最终屈居第二。在刚刚落幕的AtCoder世界巡回总决赛上,12名决赛选手两天时间里展开角逐。结果过程还挺紧...
- 如何将solidworks工程图转换成为cad图纸?
-
转换过程只需点一次鼠标就可搞定,而且转换的dwg在AutoCAD打开时不需更改,连图层和颜色都可一丝不差。一、初级篇一般转换1o打开需转换的Solidworks工程图,先查看和设置一下...
- 在线协作白板是什么,哪个好用?5个主流的白板工具盘点推荐!
-
相信每个职场人都有这么一种经历,临时想把一个文件分享给同事,费尽千辛万苦,却发现死活找不到,办公俨然成了“不是在找文件,就是在找文件的路上”,这样的办公体验别提有多差了:不止要处理糟心事,还不得不忍受...
- 实测!九款Edge浏览器插件推荐,强烈建议收藏
-
自从抛弃Chrome投奔Edge后,好用的爱不释手!当然不可否认Chrome也是非常优秀的浏览器,谷歌出品必属精品嘛!然而Edge在Windows的框架内,完全从IE浏览器改头换面而且安装了插件之后,...
- 这款 DJI大疆产品竟开通了在线直播功能
-
在2020年3月25日发布的最新固件版本中,DJI大疆的产品OSMOAction灵眸运动相机也支持直播了!App固件升级到最新版本后,只需要进入Mimo图传界面,选择直播功能,并输入在直播平台上...
- OMEN暗影精灵MAX、暗影精灵11强势亮相Bilibili World 2025
-
近日,在上海举行的BilibiliWorld2025上,英特尔发布游戏本新概念——AI高静游戏本。以具备低壳温、低噪音、无损游戏性能、智能适配调优、AI助手和续航的“六边形战士”姿态刷新广大玩家...
- 强烈建议收藏!8个实用的工具类网站,每一个都让你相见恨晚
-
在日常生活和工作中,有许多实用的工具类网站可以帮助我们提高效率、解决问题,今天这里就给大家分享8个非常实用的工具类网站,每一个都让你相见恨晚,强烈建议收藏!1、Wormholewormhole.app...
- 七彩虹亮相Bilibili World 2025,全新iGame影II DDR5内存发布
-
IT之家7月12日消息,2025年BilibiliWorld已经于7月11日在国家会展中心(上海)开启,本次展会吸引了超过700家展商以及1000多位UP主参展,I...
- Sharing | 那些好用到不得了的脚本
-
AC-baidu———搜索页面设置Bilibili-Evolved———B站助手SearchEngineJump———搜索切换关于更多有趣又好玩的脚本,大家可以自行到下面一个脚本论坛探索和发现哦~论坛...
- 微信大更新!提示音铃声能换了,群消息屏蔽也能看...
-
微信8.0.8foriOS更新了。和近几个版本更新多集中在视频号功能的变化不同,这个版本的更新更侧重于聊天体验的优化,让翻译更快,让微信语音电话个性化,让群消息更好用……其中有好几项新功能感觉...
- 效率不高?试试这几个网站,分分钟解决问题
-
最近总觉得做事效率不高,为啥同事总是做得又快又好?想了想可能还是方法不对。我决定请教一下同事,他打开了收藏夹,给我分享了这几个网站。哦,原来如此!好的东西当然要大家一起分享,我也推荐给你们几个好用的网...
- 懒人福音?不,这是效率革命!英特尔智能PC助手,用声音拿捏你的PC体验!
-
2025年7月10日,在BilibiliWorld2025前夕,英特尔推出AI高静游戏本概念,加快全产业打造游戏本新品类的步伐。其中,AI高静游戏本的标配之一是预装AI助手,既可以是英特尔智能PC...
- B站视频下载攻略(b站视频下载攻略在哪)
-
作为一名宅男,非常喜欢B站,遇到很棒的资源时想下载时,都是通过B站的APP离线缓存的,而电脑端却无此项功能。要知道手机看久了眼睛疼,怎么办呢?只能将就看?经过摸索,找到了解决方法:在浏览器中输入htt...