背景
在一些业务需求下,比如导入excel数据,而这些excel文档中又包含图片等内容,那如何读取到excel图片内容,并保存下来呢?
解决方案
首先,在Springboot 环境下导入poi包,pom.xml如下
<!--poi excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
导入excel文件方法,写库的部分,跟现在的说的业务无关,暂时可不关心
public void ImportDeptdata(int mode,String filename) {
/*
如果是xls格式,使用HSSFWorkbook,HSSFSheet,HSSFRow来进行相关操作
如果是xlsx格式,使用XSSFWorkbook,XSSFSheet,XSSFRow来进行相关操作,目前只支持xlsx
*/
try {
File cfgFile = ResourceUtils.getFile(filename);
InputStream inputStream = new FileInputStream(cfgFile);
//读取excel数据
XSSFWorkbook wb = new XSSFWorkbook(inputStream);
try{
//获取sheet表格,及读取单元格内容
XSSFSheet sheet = wb.getSheetAt(0);
Map<String,String> tMap = saveExcelImgToServer(sheet);//读取excel图片文件,存储到服务器目录
//先将获取的单元格设置为String类型,下面使用getStringCellValue获取单元格内容
//如果不设置为String类型,如果单元格是数字,则报如下异常
//java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
int rowIndex = 3;
while (true) {
//设置无限循环
int cellIndex = 0;
if(sheet.getRow(rowIndex)==null || sheet.getRow(rowIndex).getCell(cellIndex)==null){
//第一列为空,则数据读取结束,跳出循环
break;
}
sheet.getRow(rowIndex).getCell(cellIndex).setCellType(CellType.STRING);//将获取的单元格设置为String类型
//读取单元格内容
String cellDeptname = sheet.getRow(rowIndex).getCell(cellIndex).getStringCellValue(