首页 > 其他分享 >Excel 批量图片导入功能,使单元格高度和宽度适应图片

Excel 批量图片导入功能,使单元格高度和宽度适应图片

时间:2022-10-31 11:40:25浏览次数:129  
标签:导入 wenjian ActiveSheet Cells 单元格 Excel geshu 图片

分享 Excel 批量图片导入功能,使单元格高度和宽度适应图片。

Excel 批量图片导入功能,很多插件有这个功能,大部分插件的导入功能都是使图片适应单元格的大小,

但是这点可能跟很多人的实际需求不一样,因此我单独写了一个图片导入功能,使单元格适应图片的大小

代码缺点,需要手工替换代码中的 .png 图片格式为你 自己需要导入的 图片文件格式.

Excel 批量图片导入功能,使单元格高度和宽度适应图片_扩展名


附上代码:

Sub 导入图片()

Dim wenjian_geshu

Dim lujin

Dim tupian_name

Dim zonghe_bi

Dim hanggao

Dim tishi_kuozhangming

tishi_kuozhangming = MsgBox(vbCrLf & "请确认是否需要 修改 程序代码的 文件扩展名 ? " & vbCrLf & vbCrLf _

& "点击 “确定” 退出程序,并修改程序扩展名;" & vbCrLf & vbCrLf _

& "点击 “取消” 继续导入图片。" & vbCrLf & vbCrLf _

, vbOKCancel)

If tishi_kuozhangming = vbOK Then Exit Sub

wenjian_geshu = 0

lujin = InputBox("请输入图片文件夹路径,可以贴入路径")

If lujin = "" Then Exit Sub

tupian_name = Dir(lujin & "*.png", vbNormal)

'.png 格式可以更改为其他格式,用于显示其他格式的图片,

'.png 可以替换为 .* 任意文件格式,但是为了避免 ActiveSheet.Shapes.AddPicture(lujin & "" & ActiveSheet.Cells(wenjian_geshu, 1).Text & ".png", _ 程序出错,暂时不替换

'但是可以新建不同的工作簿,再导入不同格式的图片后,将表格合并为一张表格。

'不可以在同一工作簿的不同表格中重复执行 代码,即使将 新建分页表 的 名称改为 Sheet1 也不可以,因为本人水平有限不会修改测试了。希望能有大神优化下代码。

Do

If tupian_name = "" Then '输出图片名称 到 第 1 列

Exit Do

End If

wenjian_geshu = wenjian_geshu + 1

ActiveSheet.Cells(wenjian_geshu, 1).Select '方便查看执行到哪一行了

ActiveSheet.Cells(wenjian_geshu, 1) = tupian_name '输出图片名称

Rows(wenjian_geshu).RowHeight = 409 '设置行高为 Excel 的最大值 409

Columns(5).ColumnWidth = 255 '设置列宽为 Excel 的最大值 255

Dim tupian

Set tupian = ActiveSheet.Pictures.Insert(lujin & "" & ActiveSheet.Cells(wenjian_geshu, 1).Text)

With tupian

.ShapeRange.LockAspectRatio = msoTrue '锁定纵横比

.Placement = xlMoveAndSize '图片大小和位置随单元格的大小和位置而改变。

.Top = ActiveSheet.Cells(wenjian_geshu, 5).Top + 4

.Left = ActiveSheet.Cells(wenjian_geshu, 5).Left + 4 '两行代码设置图片左上角位置,对其单元格,距离单元格边距为 4

zonghe_bi = .Width / .Height '取得图片的 长宽比,以便后续图片的实际高度超过行高的时候,重新设置图片宽度,以保持图片缩小后的长宽比例

Cells(wenjian_geshu, 2) = Int(.Height) + 1

hanggao = Cells(wenjian_geshu, 2) + 3

If hanggao > 409 Then '不超过 409 则就使用上一行代码图片的默认长度

.Height = 403 '超过 EXCEL 最大行高 409,则设置图片 高度为 403,并根据图片纵横比 重新设置图片的长度

.Width = zonghe_bi * .Height ' 根据图片综合比 重新设置图片的长度

Else '不超过 409 则就使用上一行代码图片的默认长度

Rows(wenjian_geshu).RowHeight = hanggao + 6

End If

Cells(wenjian_geshu, 6) = .Width '图片后面的第一列即表格的第六列存储

If wenjian_geshu > 1 Then

If Cells(wenjian_geshu, 6) < Cells(wenjian_geshu - 1, 6) Then Cells(wenjian_geshu, 6) = Cells(wenjian_geshu - 1, 6)

End If

'取得列宽最大值,以便循环结束后设置最大列宽

Cells(wenjian_geshu, 1) = Left(Cells(wenjian_geshu, 1), Len(Cells(wenjian_geshu, 1)) - 4) '重新输出图片名称,去掉扩展名。

Cells(wenjian_geshu, 7) = .Height '在执行 Delete 语句 删除 链接图片之前取得修改后的图片 宽 和 高的数据

Cells(wenjian_geshu, 8) = .Width

.Delete 'Pictures.Insert只能插入图片链接,不能将图片与表格一起保存,

'故 删除图片链接,改用 Shapes.AddPicture 导入图片,使图片与表格同时保存,以上全部代码用来设置行高和列宽,及 设置 取得 图片的 宽 和 高 ,使其适应单元格的 高 和 宽

'.png 格式可以更改为其他格式,用于显示其他格式的图片,

ActiveSheet.Shapes.AddPicture(lujin & "" & ActiveSheet.Cells(wenjian_geshu, 1).Text & ".png", _

False, _

True, _

ActiveSheet.Cells(wenjian_geshu, 5).Left + 4, _

ActiveSheet.Cells(wenjian_geshu, 5).Top + 4, _

Cells(wenjian_geshu, 8), _

Cells(wenjian_geshu, 7)).Select '在第五列导入图片

Selection.ShapeRange.LockAspectRatio = msoTrue '锁定纵横比

Selection.Placement = xlMoveAndSize '图片大小和位置随单元格的大小和位置而改变。

End With

tupian_name = Dir '再次调用 dir 执行下面的图片的循环操作,不可以有参数,

'此句为整个代码断 最重要的语句,虽然我看不懂,但是直接用吧,有用就好了,知其然而不知其所以然好了。

Loop

Columns("E:E").Select

Selection.ColumnWidth = Int(Cells(wenjian_geshu, 6) / 5.9) '设置列宽为最大图片的列宽,5.9 为图片宽度 与 Excel 表格的宽度比

Columns("A:A").Select

Columns("A:A").EntireColumn.AutoFit

Columns(6).Select

Selection.Delete Shift:=xlToLeft '设置完第 5 列的列宽后,删除存储最大列宽值的 第 6 列

Columns("F:XFD").Select

Selection.ColumnWidth = 8.11

Columns("B:D").Select

Selection.Delete Shift:=xlToLeft

Columns("C:D").Select

Selection.Delete Shift:=xlToLeft

Range("A1").Select

'可以通过删除和插入列 的代码,调整图片名称列 和 图片实际位置列 最终所在的位置列

ActiveSheet.UsedRange.Select '添加边框

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

With Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

With Selection.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

With Selection.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

With Selection.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

With Selection.Borders(xlInsideHorizontal)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin

End With

MsgBox ("图片导入完成!")

Range("A1").Select

End Sub

程序执行完成以后,A列放置的数据为自己命名的图片名称,B列放置的为图片。

Excel 批量图片导入功能,使单元格高度和宽度适应图片_数据_02


Excel 批量图片导入功能,使单元格高度和宽度适应图片


标签:导入,wenjian,ActiveSheet,Cells,单元格,Excel,geshu,图片
From: https://blog.51cto.com/u_15705258/5808886

相关文章