设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3216|回复: 4
打印 上一主题 下一主题

[与其它组件] 批量导出图片到Excel

[复制链接]
跳转到指定楼层
1#
发表于 2019-5-5 15:03:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前段时间,有网友在群里问,如何把图片导出到Excel上。当时分享了一个之前写的示例批量插入图片并调整大小,建议他把里面的语句修改下,也不知道后来他有没有完成。


为什么非要导出到Excel上呢?我很奇怪为什么会有这样的需求。是因为Access的窗体放图片不好吗?还是因为用报表格式导出PDF不好吗?还是因为很多人习惯用Excel?……对于想不明白的事情,我向来不会花太多时间去想,照做就是了。于是就把之前的例子找过来,随手改改,做成以下例子。

按惯例先上代码:
  1. Sub exportImg()
  2.     Dim rst As New ADODB.Recordset
  3.     Dim exl As New Excel.Application
  4.     Dim wb As Workbook
  5.     Dim ws As Worksheet
  6.     Dim i As Long
  7.     Dim j  As Long
  8.     Dim img As ImageSize
  9.    
  10.     rst.Open "tblPic", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  11.     Set wb = exl.Workbooks.Add(CurrentProject.Path & "\test.xltx")
  12.     Set ws = wb.ActiveSheet
  13.    
  14.     '初始化
  15.     i = 0
  16.     j = 0
  17.    
  18.     '写入表头
  19.     For i = 0 To rst.Fields.Count - 1
  20.         ws.Range("A1").Offset(0, i) = rst.Fields(i).Name
  21.     Next

  22.    
  23.     '写入数据
  24.     Do Until rst.EOF
  25.         ws.Range("2:2").Offset(j, 0).Insert xlUp, xlFormatFromRightOrBelow
  26.         For i = 0 To rst.Fields.Count - 1
  27.         '如果不是最后一个(即图片列)
  28.             If i < rst.Fields.Count - 1 Then
  29.             '居中对齐
  30.                 With ws.Range("A2").Offset(j, i)
  31.                     .Value = rst(i)
  32.                     .HorizontalAlignment = xlCenter
  33.                     .VerticalAlignment = xlCenter
  34.                 End With
  35.             Else
  36.                 img = GetImageSize(rst(i))
  37.                 ws.Shapes.AddPicture rst(i), msoFalse, msoTrue, ws.Range("A2").Offset(j, i).Left + 2, ws.Range("A2").Offset(j, i).Top + 2, img.Width, img.Height
  38.                 ws.Range("A2").Offset(j, i).RowHeight = img.Height + 2
  39.             End If
  40.         Next
  41.         j = j + 1
  42.         rst.MoveNext
  43.     Loop
  44.    
  45.     rst.Close
  46.     '删除已有文件
  47.     If Len(Dir(CurrentProject.Path & "\test0.xlsx")) > 0 Then Kill CurrentProject.Path & "\test0.xlsx"
  48.    
  49.     '删除最后一列后保存
  50.     ws.Range("2:2").Offset(j, 0).Delete
  51.     wb.SaveAs CurrentProject.Path & "\test0.xlsx"
  52.     wb.Close
  53.     exl.Quit
  54. End Sub
复制代码
主体思想是通过ADO把数据写入,在涉及图片的字段,通过插入图片的形式进行处理。此外,这里预设了模板,这样便于处理一些必要的格式问题(例如,字体大小,居中等等)。这里同样也提出了一个问题:
当图片尺寸差异比较大的时候,可能并不是那么美观(请留意小图片的显示),除非预先调整到固定的一个尺寸。

PS:这里不打算处理2003版本,主要原因在于2003版本的shapes方法和2007的有所不同。如需查看2003格式下的处理方式,请留意以下链接:
批量插入图片并调整大小

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +30 收起 理由
admin + 30 (其它)优秀教程、原创内容、以资鼓励、其.

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2019-5-5 16:53:21 | 只看该作者
赞!
回复

使用道具 举报

点击这里给我发消息

3#
发表于 2019-5-5 17:08:59 来自手机 | 只看该作者
回复

使用道具 举报

4#
发表于 2019-5-7 07:14:41 | 只看该作者

赞一个
来自: 微社区

点击这里给我发消息

5#
发表于 2020-11-19 15:33:04 | 只看该作者
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-5 19:12 , Processed in 0.088092 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表