|
前段时间,有网友在群里问,如何把图片导出到Excel上。当时分享了一个之前写的示例批量插入图片并调整大小,建议他把里面的语句修改下,也不知道后来他有没有完成。
为什么非要导出到Excel上呢?我很奇怪为什么会有这样的需求。是因为Access的窗体放图片不好吗?还是因为用报表格式导出PDF不好吗?还是因为很多人习惯用Excel?……对于想不明白的事情,我向来不会花太多时间去想,照做就是了。于是就把之前的例子找过来,随手改改,做成以下例子。
按惯例先上代码:
- Sub exportImg()
- Dim rst As New ADODB.Recordset
- Dim exl As New Excel.Application
- Dim wb As Workbook
- Dim ws As Worksheet
- Dim i As Long
- Dim j As Long
- Dim img As ImageSize
-
- rst.Open "tblPic", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Set wb = exl.Workbooks.Add(CurrentProject.Path & "\test.xltx")
- Set ws = wb.ActiveSheet
-
- '初始化
- i = 0
- j = 0
-
- '写入表头
- For i = 0 To rst.Fields.Count - 1
- ws.Range("A1").Offset(0, i) = rst.Fields(i).Name
- Next
-
- '写入数据
- Do Until rst.EOF
- ws.Range("2:2").Offset(j, 0).Insert xlUp, xlFormatFromRightOrBelow
- For i = 0 To rst.Fields.Count - 1
- '如果不是最后一个(即图片列)
- If i < rst.Fields.Count - 1 Then
- '居中对齐
- With ws.Range("A2").Offset(j, i)
- .Value = rst(i)
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- Else
- img = GetImageSize(rst(i))
- 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
- ws.Range("A2").Offset(j, i).RowHeight = img.Height + 2
- End If
- Next
- j = j + 1
- rst.MoveNext
- Loop
-
- rst.Close
- '删除已有文件
- If Len(Dir(CurrentProject.Path & "\test0.xlsx")) > 0 Then Kill CurrentProject.Path & "\test0.xlsx"
-
- '删除最后一列后保存
- ws.Range("2:2").Offset(j, 0).Delete
- wb.SaveAs CurrentProject.Path & "\test0.xlsx"
- wb.Close
- exl.Quit
- End Sub
复制代码 主体思想是通过ADO把数据写入,在涉及图片的字段,通过插入图片的形式进行处理。此外,这里预设了模板,这样便于处理一些必要的格式问题(例如,字体大小,居中等等)。这里同样也提出了一个问题:
当图片尺寸差异比较大的时候,可能并不是那么美观(请留意小图片的显示),除非预先调整到固定的一个尺寸。
PS:这里不打算处理2003版本,主要原因在于2003版本的shapes方法和2007的有所不同。如需查看2003格式下的处理方式,请留意以下链接:
批量插入图片并调整大小
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|