MS Access 将剪贴板中的图片保存为 jpg

Posted

技术标签:

【中文标题】MS Access 将剪贴板中的图片保存为 jpg【英文标题】:MS Access save picture from clipboard as jpg 【发布时间】:2018-04-04 07:42:03 【问题描述】:

我正在寻找代码以将剪贴板中的屏幕截图保存为 jpg 文件,直接在 MS 访问或 VBA 方法中将 bmp 转换为 jpg。我找到了解决方法,但我对它的速度不满意。 (我正在使用MS Access打开excel文件,运行代码将图片粘贴并保存为jpg,代码如下)。

我找到了working code,但它会将图片保存为 *.bmp。

我正在使用 MS Access 2016

MS Access 文件中的代码:

Sub Copy_screenshot_to_file()
Dim db As Database
Set db = CurrentDb()
Dim qSQL As String

Dim xl As Object
Dim xlApp As Object
Dim xlPath As String
Dim fPath As String
fPath = "\\XXX\"      'New file location
xlPath = "\\XXX...\Export to JPG tool.xlsm"      'excel file location

Dim dwg_nr As String
Dim row_nr As Long
Dim fName As String
Dim lName As String
Dim Date1 As Date

dwg_nr = Screen.ActiveForm![PID_nr].Value
row_nr = Screen.ActiveForm![ID_num].Value

'file name gen
Date1 = Now()
fName = dwg_nr & " " & Format(Date1, "yyyy.dd.mm hh-mm")
lName = fPath & fName & ".jpg"


'generate screenshot
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open (xlPath)
xl.Visible = True '
xl.Run "RunCodeFromAccess", fName, fPath
xl.ActiveWorkbook.Close (False)
xl.Quit
Set xl = Nothing

If Dir(lName) = "" Then
    MsgBox "JPG file not created, please make new screenshot"
    Exit Sub
End If


'add link to DB
qSQL = "UPDATE tblXXX SET Field12 = '" & lName & "' WHERE ID_num = " & row_nr
db.Execute qSQL, dbFailOnError

End Sub

excel文件中的代码:

Sub RunCodeFromAccess(Fname As String, fPath As String)

Dim ws As Worksheet
Set ws = Sheets("Sheet1")
ws.Paste
'Range("A1").Paste
Dim oDia As Object
Dim oChartArea
Dim sh As Shape
Dim PicName As String

For Each sh In ws.Shapes
PicName = Fname
    sh.CopyPicture
    Set oDia = ws.ChartObjects.Add(0, 0, sh.Width, sh.Height)
    Set oChartArea = oDia.Chart
    oDia.Activate
    With oChartArea
        .ChartArea.Select
        .Paste
        .Export (fPath & PicName & ".jpg")
    End With
    oDia.Delete
sh.Delete
Next

End Sub

【问题讨论】:

图像最初是如何进入剪贴板的? 等等,你实际上想做什么?目标是将 Excel 图表保存为图像吗?似乎您正在尝试为解决方法寻找解决方法。您的代码显示 Excel 图表,但您的问题显示 Excel,并且没有说明为什么需要将其保存为 JPG 而不是 PNG 或 BMP。拜托,您需要提供更多关于您实际尝试做的事情的信息。 我正在尝试更新一个保存使用 W7 默认截图工具创建的快照的工具。当用户对绘图或其他文档有评论时,他可以简单地使用截图工具对有问题的区域进行截图,在 MS Access 数据表表单中选择行并按“添加”按钮。当前版本的脚本使用外部 excel 文件(图表对象)制作 jpg 并在 MS Access 表单中添加指向特定行的链接。我发现可能的解决方案可能是 freeimage.dll。我设法转换了图像格式,但我正在努力连接到剪贴板...... 那么您目前有用于 Excel 的 VBA,可将 JPG 插入 Access 表中?它目前有效,但您正试图消除 Excel 作为“中间人”,对吗?请发布该代码。 已添加代码。目标是摆脱“中间人”(excel)并在 MS Access 中完成所有工作。现在我有访问 VBA 可以打开 excel 文件并运行存储在 excel 文件中的子程序。剪贴板中的图像粘贴到 Excel 工作表,转换为图表对象,保存到特定文件夹。完成后,excel 文件关闭而不保存。 【参考方案1】:

有点晚了,但如果您仍然对此功能感兴趣。您可以查看我的VBA Tools Dll,它允许将剪贴板图像保存到您提供的位置。示例文件夹中有一个带有 vba 包装器的示例 accdb 文件可供下载。

使用示例文件中的 vba wapper 将是:

SaveClipboardToImage()

SaveClipboardToImage(Optional Path As String = "", Optional FileNAme As String = "", Optional FileType As String = "jpeg")

如果在剪贴板中没有找到图像,它将返回保存文件的完整文件路径或“”。

在使用任何 dll 之前,请随时使用在线防病毒扫描程序。

【讨论】:

【参考方案2】:

一切皆有可能,但(由于缺乏更多信息)我怀疑这种情况下的合适答案是不可能。至少没有第三方实用程序或其他编程语言的帮助。

要了解原因,您需要了解剪贴板的工作原理。这是一些.NET documentation about the Clipboard Class,但她的简短版本是:并非所有内容都以相同的方式存储在剪贴板上。

当剪贴板存储复制的图像时,它始终存储为位图。

当剪贴板存储文件(如 JPG)时,它不存储实际数据;它正在存储指向文件的“指针”。如果您将 JPG 文件复制到剪贴板,然后删除该文件,则也无法从剪贴板中检索该文件。

根据您的代码,我怀疑您试图做的是将图表从 Excel(或类似的东西)复制到剪贴板并希望保存将其保存到文件中,作为将对象直接保存到文件的一种解决方法。

如果您尝试将 Excel 对象(如图表)另存为 JPG 文件,请直接执行:

ActiveChart.Export "c:\outputPath\outputFileName.jpg", "JPG"

也可以使用其他图形过滤器,具体取决于您机器上安装的内容。


更多信息:

MSDN:Chart.Export Method (Excel)

How to easily export Excel Charts as Images


(我怀疑这是这里常见问题的示例:XY Problem程序员 Bob 被困在问题 X 上,他不知道如何解决。他想出了潜在的解决方案 Y,但也不知道如何解决这个问题,所以 Bob 就问题 Y 寻求帮助,这几乎总是会给所有相关人员带来不必要的工作,而 Bob 应该只是询问问题 X。)

【讨论】:

在这种情况下...不要"be like bob" @QHarr - 不应该是"be like bill"吗? @QHarr 那必须是它。 :) 正如我解释的那样,OP 正在使用一种技巧从剪贴板中获取图像:打开一个空白的 Excel 工作表,执行粘贴(粘贴当前在剪贴板上的图像),保存粘贴的图片转为jpg。但是,当前的代码看起来很没有功能,我无法判断。但是使用这个技巧应该是可能的。 在 VBA 的情况下,我是自学的。我知道我的代码可能看起来像......虽然不是很专业,但我正在努力做到最好。我不知道如何在不使用 excel 的情况下将图片从剪贴板保存到 jpg 文件(仅限 MS Access VBA)。

以上是关于MS Access 将剪贴板中的图片保存为 jpg的主要内容,如果未能解决你的问题,请参考以下文章

pdf怎么转换成jpg图片格式

怎样将matlab绘出的图形另存为高精度jpg图片?

vba 怎么读取系统剪贴板中的图片到image控件?

PowerShell保存剪贴板图片并构造MarkDown语句

matlab中如何将输出的figure中的图像保存在我的文档中

将数据从 MS Access 表单保存到同一个 MS Access 数据库中的另一个表?