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的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell保存剪贴板图片并构造MarkDown语句