Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从pdf URL提取pdf属性_Excel_Vba_Url_Pdf_Browser - Fatal编程技术网

Excel 从pdf URL提取pdf属性

Excel 从pdf URL提取pdf属性,excel,vba,url,pdf,browser,Excel,Vba,Url,Pdf,Browser,我有一套4000个pdf url,需要提取文档属性,如文档创建日期、文档大小、页数 注意:不应下载PDF文档 请给我一个建议 问候,, 阿拉文德嗯。。。我写了一点东西,在互联网上寻找解决这个问题的方法 没有下载文件的解决方案找不到,并且认为不可能 但我编写了一个代码,下载文件,获取其属性,然后删除它。所有这些都对用户完全透明 如何使用: 任何细胞类型 =GetPDFData(URL;NumberData) 例如: =getPDFData(A2;1) 数字数据: 1=名称 2=已创建日期 3=日期

我有一套4000个pdf url,需要提取文档属性,如文档创建日期、文档大小、页数

注意:不应下载PDF文档

请给我一个建议

问候,,
阿拉文德

嗯。。。我写了一点东西,在互联网上寻找解决这个问题的方法

没有下载文件的解决方案找不到,并且认为不可能

但我编写了一个代码,下载文件,获取其属性,然后删除它。所有这些都对用户完全透明

如何使用: 任何细胞类型 =GetPDFData(URL;NumberData)

例如: =getPDFData(A2;1)

数字数据:

1=名称

2=已创建日期

3=日期修改

4=页面计数(是“Beta”,有时不工作lol)

5=尺寸

6=种类

代码:(将其粘贴到新模块中)

公共函数GetPDFData(URL为字符串,TipoDato为整数)为字符串
作为对象的模糊oFS
将strFilename设置为字符串
创建文件夹
下载文件(URL)
strFilename=“C:\Temp\pdfTemporal\”&NombreDeArchivo(URL)
Set of s=CreateObject(“Scripting.FileSystemObject”)
选择案例TipoDato
案例1
GetPDFData=NombreDeArchivo(URL)
案例2
GetPDFData=oFS.GetFile(strFilename).DateCreated
案例3
GetPDFData=oFS.GetFile(strFilename).DateLastModified
案例4
GetPDFData=pagecount(strFilename)
案例5
GetPDFData=oFS.GetFile(strFilename).Size/1024&“Kb”
案例6
GetPDFData=oFS.GetFile(strFilename)。键入
其他情况
GetPDFData=“错误”
结束选择
集合=无
删除文件夹
端函数
子下载文件(myURL作为字符串)
模糊纹理如字符串
TextUrl=myURL
Dim WinHttpReq作为对象
设置WinHttpReq=CreateObject(“Microsoft.XMLHTTP”)
WinHttpReq.Open“GET”,myURL,False
WinHttpReq.send
myURL=WinHttpReq.ResponseBy
如果WinHttpReq.Status=200,则
设置oStream=CreateObject(“ADODB.Stream”)
奥斯特雷姆,开门
oStream.Type=1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile“c:\Temp\pdfTemporal\”和NombreDeArchivo(TextUrl),2'1=不覆盖,2=覆盖
奥斯特雷姆,完毕
如果结束
端接头
子文件夹()
Dim路径作为字符串,NOMBERCARPETA作为字符串
Path=“c:\Temp\”
NombreCarpeta=“pdfTemporal”
如果Dir(Path,vbDirectory)“,则
如果Dir(Path&NombreCarpeta,vbDirectory)=“”,则MkDir Path&NombreCarpeta
如果结束
端接头
子文件夹()
出错时继续下一步
终止“c:\Temp\pdfTemporal\*.*”
RmDir“c:\Temp\pdfTemporal\”
错误转到0
端接头
公共函数NombreDeArchivo(URL作为字符串)作为字符串
像线一样变暗
以字符串的形式显示
esp=“”
a=URL
对于i=1到500
esp=esp&“
接下来我
a=替换(a,“/”,esp)
a=右(a,500)
a=修剪(a)
NombreDeArchivo=a
端函数
公共函数pagecount(sfilename作为字符串)作为字符串
使页面变暗,变长
关于错误转到a
作为整数的Dim nFileNum
像线一样变暗
作为整数的Dim c
Dim pos,pos1为整数
pos=0
pos1=0
c=0
nFileNum=FreeFile
打开二进制锁读写为#nFileNum的sfilename
直到EOF为止(nFileNum)
输入#1,s
c=c+1
如果c0或pos1>0,则
关闭#nFileNum
s=饰件(中部(s,位置10))
s=替换(s,“/N”,”)
s=替换(s,“/count”,“”)
s=替换(s,“,”)
s=替换(s,“/”,“”)
对于i=65到125
s=替换(s,Chr(i),“”)
下一个
页数=Val(修剪)
如果页面小于0,则
页数=1
如果结束
关闭#nFileNum
pagecount=页数
退出功能
如果结束
如果c>=10000,则
转到a
如果结束
环
关闭#nFileNum
pagecount=页数
退出功能
a:
关闭#nFileNum
页数=1
pagecount=页数
退出功能
端函数
我希望你觉得它有用,或者至少是一个开始


你好

如果您不能在这些URL指向的服务器上使用软件,并且您不想下载PDF文件,您建议如何了解这些文件?我认为你在这里定义了一个物理上的不可能…如果有任何软件在那里,建议。所以我可以试一试。如果这在物理上是不可能的,谁能推荐软件呢?此外,关于Stackoverflow的软件建议是不允许的。我忘了澄清:这是excel的自定义功能!!尼古拉斯,谢谢你的工作。但是,文档创建日期和修改日期给出了错误的数据。它显示实际时间。有什么解决办法吗?
Public Function GetPDFData(URL As String, TipoDato As Integer) As String

    Dim oFS As Object
    Dim strFilename As String
    CreateFolder
    DownloadFile (URL)
    strFilename = "C:\Temp\pdfTemporal\" & NombreDeArchivo(URL)
    Set oFS = CreateObject("Scripting.FileSystemObject")
    Select Case TipoDato
        Case 1
        GetPDFData = NombreDeArchivo(URL)
        Case 2
        GetPDFData = oFS.GetFile(strFilename).DateCreated
        Case 3
        GetPDFData = oFS.GetFile(strFilename).DateLastModified
        Case 4
        GetPDFData = pagecount(strFilename)
        Case 5
        GetPDFData = oFS.GetFile(strFilename).Size / 1024 & "Kb"
        Case 6
        GetPDFData = oFS.GetFile(strFilename).Type
        Case Else
        GetPDFData = "ERROR"
    End Select
    Set oFS = Nothing
    DeleteFolder

End Function

Sub DownloadFile(myURL As String)

    Dim TextUrl As String
    TextUrl = myURL
    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", myURL, False
    WinHttpReq.send
    myURL = WinHttpReq.responseBody
    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.Type = 1
        oStream.Write WinHttpReq.responseBody
        oStream.SaveToFile "c:\Temp\pdfTemporal\" & NombreDeArchivo(TextUrl), 2 ' 1 = no overwrite, 2 = overwrite
        oStream.Close
    End If

End Sub

Sub CreateFolder()
    Dim Path As String, NombreCarpeta As String
    Path = "c:\Temp\"
    NombreCarpeta = "pdfTemporal"
     If Dir(Path, vbDirectory) <> "" Then
       If Dir(Path & NombreCarpeta, vbDirectory) = "" Then MkDir Path & NombreCarpeta
     End If
End Sub

Sub DeleteFolder()
    On Error Resume Next
     Kill "c:\Temp\pdfTemporal\*.*"
    RmDir "c:\Temp\pdfTemporal\"
    On Error GoTo 0
End Sub

Public Function NombreDeArchivo(URL As String) As String

Dim a As String
Dim esp As String
esp = " "
a = URL
For i = 1 To 500
 esp = esp & " "
Next i
a = Replace(a, "/", esp)
a = Right(a, 500)
a = Trim(a)
NombreDeArchivo = a

End Function

Public Function pagecount(sfilename As String) As String
Dim pages As Long
On Error GoTo a
Dim nFileNum As Integer
Dim s As String
Dim c As Integer
Dim pos, pos1 As Integer
pos = 0
pos1 = 0
c = 0
nFileNum = FreeFile
Open sfilename For Binary Lock Read Write As #nFileNum

  Do Until EOF(nFileNum)
    Input #1, s
    c = c + 1
    If c <= 10 Then
        pos = InStr(s, "/N")
    End If
    pos1 = InStr(s, "/count")
       If pos > 0 Or pos1 > 0 Then
            Close #nFileNum
            s = Trim(Mid(s, pos, 10))
            s = Replace(s, "/N", "")
            s = Replace(s, "/count", "")
            s = Replace(s, " ", "")
            s = Replace(s, "/", "")
            For i = 65 To 125
                    s = Replace(s, Chr(i), "")
            Next
            pages = Val(Trim(s))
            If pages < 0 Then
                pages = 1
            End If
            Close #nFileNum
            pagecount = pages
            Exit Function
        End If
        If c >= 10000 Then
             GoTo a
        End If
  Loop
    Close #nFileNum
    pagecount = pages
    Exit Function
a:
    Close #nFileNum
    pages = 1
    pagecount = pages
    Exit Function
End Function