提问人:Alireza Daneshmayeh 提问时间:8/17/2023 最后编辑:braXAlireza Daneshmayeh 更新时间:8/17/2023 访问量:82
从 Access OLE 对象中提取文件
Extract Files from an Access OLE Object
问:
如何从 Access 中的表格中获取这些 pdf 格式的包文件并将它们移动到文件夹中
如果可以的话,请将(产品名称)和(pdf)也导出来,那就太棒了;我知道是否有修复程序;我会的。
例如
这是文件:我创建的文件作为示例。如果可以,请检查一下,让我知道这个文件的问题。另外,请指导我提取PDF文件所需的命令
我在 VBA 中使用了这段代码;没有回答 ;如果编码以外的其他方式也有效;说声谢谢
Sub ExportPDFs()
Dim rs As DAO.Recordset
Dim filePath As String
Dim fileNum As Integer
Set rs = CurrentDb.OpenRecordset("SELECT pakage FROM Table1 ")
If rs.RecordCount > 0 Then
filePath = "C:\Users\AliReza\Desktop\folder\"
rs.MoveFirst
Do Until rs.EOF
fileNum = FreeFile
Open filePath & rs.Fields("pakage") & ".pdf" For Output As #fileNum
Put #fileNum, , rs.Fields("Package").Value
Close #fileNum
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
End Sub
答:
0赞
Olivier Jacot-Descombes
8/17/2023
#1
首先,您需要两个不同的列来表示文档的名称(我们称之为 )和存储文档的 OLE 对象 ()。Name
Package
然后,可以使用 将 OLE 对象存储到文件中。ADODB.Stream
Sub ExportPDFs()
Dim rs As DAO.Recordset
Dim folder As String, path As String
Dim adoStream As Object 'Late bound ADODB.Stream
folder = "C:\Users\AliReza\Desktop\folder\"
Set rs = CurrentDb.OpenRecordset("SELECT Name, Package FROM documents")
Do Until rs.EOF
path = folder & rs!Name & ".pdf"
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Type = 1 'adTypeBinary
adoStream.Open
adoStream.Write rs("Package").Value
adoStream.SaveToFile path, adSaveCreateOverWrite
adoStream.Close
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
请参阅:@ErikA使用 ADODB 的方法。流。
评论
0赞
Erik A
8/17/2023
这不适用于 OLE 包对象,我认为 OP 具有这些对象,因为它们在表视图中被标记为“包”。这些对象可以包含多个具有文件名的文件,并且需要更复杂的方法来提取数据。最好只使用 Lebans OleToDisk 来做这些。
0赞
Olivier Jacot-Descombes
8/17/2023
我做了一个测试,手动将 PDF 插入到 OLE 对象列中。该条目显示为“Package”,上面的代码有效。问题是是否有办法从此 OLE 对象中提取 PDF 的原始名称?
0赞
Erik A
8/17/2023
这很奇怪,你确定 PDF 是原封不动的,仍然可以阅读吗?当然,您可以将 OLE 字段的二进制内容写入文件,但它应该包含 OLE 标头和压缩文件数据,而不是原始内容。如果 OLE 字段中有原始二进制数据,则它应该显示为“长二进制数据”,而不是“包”,并且无法通过 GUI afaik 创建这些数据
0赞
Olivier Jacot-Descombes
8/17/2023
PDF 的大小确实发生了变化,比原始版本大了 552 字节;但是我可以打开并显示它。我在 Firefox 和 PDF Architect 7 中尝试过。
0赞
Olivier Jacot-Descombes
8/17/2023
二进制编辑器显示新文档确实具有 Package 页眉(和页脚)。显然,提到的应用程序可以打开打包的 PDF 的 .包头包含原始文件路径。因此,确实应该可以从中获取文档名称。
评论