Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
27a037ed
提交
27a037ed
authored
4月 25, 2025
作者:
RuoYi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Excel导入导出支持多图片
上级
87173cbe
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
40 行增加
和
31 行删除
+40
-31
StringUtils.java
...mon/src/main/java/com/ruoyi/common/utils/StringUtils.java
+12
-0
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+28
-31
没有找到文件。
ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
浏览文件 @
27a037ed
...
...
@@ -381,6 +381,18 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
return
new
HashSet
<
String
>(
str2List
(
str
,
sep
,
true
,
false
));
}
/**
* 字符串转list
*
* @param str 字符串
* @param sep 分隔符
* @return list集合
*/
public
static
final
List
<
String
>
str2List
(
String
str
,
String
sep
)
{
return
str2List
(
str
,
sep
,
true
,
false
);
}
/**
* 字符串转list
*
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
浏览文件 @
27a037ed
...
...
@@ -95,6 +95,8 @@ public class ExcelUtil<T>
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ExcelUtil
.
class
);
public
static
final
String
SEPARATOR
=
","
;
public
static
final
String
FORMULA_REGEX_STR
=
"=|-|\\+|@"
;
public
static
final
String
[]
FORMULA_STR
=
{
"="
,
"-"
,
"+"
,
"@"
};
...
...
@@ -360,7 +362,7 @@ public class ExcelUtil<T>
throw
new
IOException
(
"文件sheet不存在"
);
}
boolean
isXSSFWorkbook
=
!(
wb
instanceof
HSSFWorkbook
);
Map
<
String
,
PictureData
>
pictures
;
Map
<
String
,
List
<
PictureData
>>
pictures
=
null
;
if
(
isXSSFWorkbook
)
{
pictures
=
getSheetPictures07
((
XSSFSheet
)
sheet
,
(
XSSFWorkbook
)
wb
);
...
...
@@ -504,16 +506,15 @@ public class ExcelUtil<T>
}
else
if
(
ColumnType
.
IMAGE
==
attr
.
cellType
()
&&
StringUtils
.
isNotEmpty
(
pictures
))
{
PictureData
image
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
if
(
image
==
null
)
{
val
=
""
;
}
else
StringBuilder
propertyString
=
new
StringBuilder
();
List
<
PictureData
>
images
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
for
(
PictureData
picture
:
images
)
{
byte
[]
data
=
image
.
getData
();
val
=
FileUtils
.
writeImportBytes
(
data
);
byte
[]
data
=
picture
.
getData
();
String
fileName
=
FileUtils
.
writeImportBytes
(
data
);
propertyString
.
append
(
fileName
).
append
(
SEPARATOR
);
}
val
=
StringUtils
.
stripEnd
(
propertyString
.
toString
(),
SEPARATOR
);
}
ReflectUtils
.
invokeSetter
(
entity
,
propertyName
,
val
);
}
...
...
@@ -1037,12 +1038,15 @@ public class ExcelUtil<T>
else
if
(
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
cell
.
getRow
().
getRowNum
()
+
1
);
String
imagePath
=
Convert
.
toStr
(
value
);
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
String
propertyValue
=
Convert
.
toStr
(
value
);
if
(
StringUtils
.
isNotEmpty
(
propertyValue
))
{
List
<
String
>
imagePaths
=
StringUtils
.
str2List
(
propertyValue
,
SEPARATOR
);
for
(
String
imagePath
:
imagePaths
)
{
byte
[]
data
=
ImageUtils
.
getImage
(
imagePath
);
getDrawingPatriarch
(
cell
.
getSheet
()).
createPicture
(
anchor
,
cell
.
getSheet
().
getWorkbook
().
addPicture
(
data
,
getImageType
(
data
)));
getDrawingPatriarch
(
cell
.
getSheet
()).
createPicture
(
anchor
,
cell
.
getSheet
().
getWorkbook
().
addPicture
(
data
,
getImageType
(
data
)));
}
}
}
}
...
...
@@ -1287,7 +1291,7 @@ public class ExcelUtil<T>
public
static
String
convertByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
String
[]
convertSource
=
converterExp
.
split
(
SEPARATOR
);
for
(
String
item
:
convertSource
)
{
String
[]
itemArray
=
item
.
split
(
"="
);
...
...
@@ -1324,7 +1328,7 @@ public class ExcelUtil<T>
public
static
String
reverseByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
String
[]
convertSource
=
converterExp
.
split
(
SEPARATOR
);
for
(
String
item
:
convertSource
)
{
String
[]
itemArray
=
item
.
split
(
"="
);
...
...
@@ -1750,31 +1754,25 @@ public class ExcelUtil<T>
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
public
static
Map
<
String
,
List
<
PictureData
>
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
Map
<
String
,
List
<
PictureData
>>
sheetIndexPicMap
=
new
HashMap
<
>();
List
<
HSSFPictureData
>
pictures
=
workbook
.
getAllPictures
();
if
(!
pictures
.
isEmpty
())
if
(!
pictures
.
isEmpty
()
&&
sheet
.
getDrawingPatriarch
()
!=
null
)
{
for
(
HSSFShape
shape
:
sheet
.
getDrawingPatriarch
().
getChildren
())
{
HSSFClientAnchor
anchor
=
(
HSSFClientAnchor
)
shape
.
getAnchor
();
if
(
shape
instanceof
HSSFPicture
)
{
HSSFPicture
pic
=
(
HSSFPicture
)
shape
;
int
pictureIndex
=
pic
.
getPictureIndex
()
-
1
;
HSSFPictureData
picData
=
pictures
.
get
(
pictureIndex
);
HSSFClientAnchor
anchor
=
(
HSSFClientAnchor
)
pic
.
getAnchor
();
String
picIndex
=
anchor
.
getRow1
()
+
"_"
+
anchor
.
getCol1
();
sheetIndexPicMap
.
put
(
picIndex
,
picData
);
sheetIndexPicMap
.
computeIfAbsent
(
picIndex
,
k
->
new
ArrayList
<>()).
add
(
pic
.
getPictureData
()
);
}
}
return
sheetIndexPicMap
;
}
else
{
return
sheetIndexPicMap
;
}
}
/**
* 获取Excel2007图片
...
...
@@ -1783,16 +1781,15 @@ public class ExcelUtil<T>
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
public
static
Map
<
String
,
List
<
PictureData
>
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
Map
<
String
,
List
<
PictureData
>>
sheetIndexPicMap
=
new
HashMap
<
>();
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
{
if
(
dr
instanceof
XSSFDrawing
)
{
XSSFDrawing
drawing
=
(
XSSFDrawing
)
dr
;
List
<
XSSFShape
>
shapes
=
drawing
.
getShapes
();
for
(
XSSFShape
shape
:
shapes
)
for
(
XSSFShape
shape
:
drawing
.
getShapes
())
{
if
(
shape
instanceof
XSSFPicture
)
{
...
...
@@ -1800,7 +1797,7 @@ public class ExcelUtil<T>
XSSFClientAnchor
anchor
=
pic
.
getPreferredSize
();
CTMarker
ctMarker
=
anchor
.
getFrom
();
String
picIndex
=
ctMarker
.
getRow
()
+
"_"
+
ctMarker
.
getCol
();
sheetIndexPicMap
.
put
(
picIndex
,
pic
.
getPictureData
());
sheetIndexPicMap
.
computeIfAbsent
(
picIndex
,
k
->
new
ArrayList
<>()).
add
(
pic
.
getPictureData
());
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论