百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

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...