Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
VBA-将PDF读取为字符串-有时不能,但有时可以-';运行时错误62';_Vba_Excel_Pdf - Fatal编程技术网

VBA-将PDF读取为字符串-有时不能,但有时可以-';运行时错误62';

VBA-将PDF读取为字符串-有时不能,但有时可以-';运行时错误62';,vba,excel,pdf,Vba,Excel,Pdf,您可以在文本编辑器中打开PDF,查看PDF的编写结构 使用VBA,我打开了一个PDF作为文本文件,然后提取文本并将其保存为VBA中的字符串变量。我想通读这篇文章,找到一个具体的元素;创建一条多段线(称为流线),并使用InStr函数获取多段线的顶点 当我向多段线添加更多顶点时,我似乎无法提取pdf的文本字符串。我得到了错误“运行时错误62”,我不明白这是什么意思,或者PDF的什么内容已经更改为现在有这个错误 附件(通过链接)是我可以阅读的PDF(文件15)和我无法阅读的PDF(文件16)。我已签入

您可以在文本编辑器中打开PDF,查看PDF的编写结构

使用VBA,我打开了一个PDF作为文本文件,然后提取文本并将其保存为VBA中的字符串变量。我想通读这篇文章,找到一个具体的元素;创建一条多段线(称为流线),并使用InStr函数获取多段线的顶点

当我向多段线添加更多顶点时,我似乎无法提取pdf的文本字符串。我得到了错误“运行时错误62”,我不明白这是什么意思,或者PDF的什么内容已经更改为现在有这个错误

附件(通过链接)是我可以阅读的PDF(文件15)和我无法阅读的PDF(文件16)。我已签入excel,以便查看两个文件中都存在顶点。还有一份VBA脚本副本作为记事本文档和excel文件(但在excel文件中很难找到-该脚本是名为“CoordExtractor_TestBuild01()”的“模块6”函数)

链接:

以下文本提取过程的代码片段,用于重现问题(如果使用了适用的pdf):

副协调员_TestBuild01()

'打开PDF并获取坐标

将文本文件设置为整数 将文件路径设置为字符串 将文件内容设置为字符串

'文本文件的文件路径 FilePath=“C:\Users\KAllan\Documents\WorkingInformation\sTreamTrain\Document16-Original.pdf”

'确定下一个可供FileOpen函数使用的文件号 TextFile=FreeFile

'以读取状态打开文本文件 以文本文件的形式打开输入的文件路径

'将文件内容存储在变量中 变暗温度,如长 Temp=LOF(文本文件)

FileContent=输入(LOF(TextFile),TextFile)

'克隆文本文件 关闭文本文件

端接头

我希望有人让我知道在这种情况下运行时错误62是什么,并提出任何工作流程,以便在将来解决它。另外,我想知道是否有某些字符不能存储为字符串当我将顶点数增加到某个数目之后,可能会包括这些顶点

此外,我更愿意保持scrips非常简单,不使用外部库,因为我希望在脚本完成时共享脚本,以便其他人可以使用它。因此,如果它没有额外的依赖项等,那么它会更简单。但是,欢迎任何和所有建议,因为这只是本项目的前半部分

多谢各位

根据,此错误是由包含

…文件或语法末尾的空格或额外返回 这是不对的

由于您的代码有时在名称和内容与不起作用的文档非常相似的文档上工作,因此在这种情况下,我们可以排除语法错误

通过将宏顶部的代码替换为下面的代码,可以在进一步处理之前清理文件内容。有了它,我可以从您的
文档16.pdf
中读取和提取信息:

Sub CoordExtractor_TestBuild01()


'Purpose to link together the extracting real PDF information and outputting the results onto a spreadsheet


'########################################################################################

'Opening the PDF and getting the coordinates
Dim n As Long
Dim TextFile As Integer
Dim FilePath As String
Dim FileContent As String

'File Path of Text File
  FilePath = "C:\TEST\Document16.pdf" ' change path

'Determine the next file number available for use by the FileOpen function
  TextFile = FreeFile      

'Open the text file in a Read State
  Open FilePath For Input As TextFile

Dim strTextLine As String
Dim vItem As Variant

Line Input #1, strTextLine
vItem = Split(strTextLine, Chr(10))

' clean file of garbage information line by line
For n = LBound(vItem) To UBound(vItem)

    ' insert appropriate conditions here - in this case if the string "<<" is present
    If InStr(1, vItem(n), "<<") > 0 Then
        If FileContent = vbNullString Then
            FileContent = vItem(n)
        Else
            FileContent = FileContent & Chr(10) & vItem(n)
        End If
    End If
Next n

'Clost Text File
  Close TextFile


' insert the rest of the code here
Sub-CoordExtractor_TestBuild01()
'目的是将提取的真实PDF信息链接在一起,并将结果输出到电子表格
'########################################################################################
'打开PDF并获取坐标
长
将文本文件设置为整数
将文件路径设置为字符串
将文件内容设置为字符串
'文本文件的文件路径
FilePath=“C:\TEST\Document16.pdf”'更改路径
'确定下一个可供FileOpen函数使用的文件号
TextFile=FreeFile
'以读取状态打开文本文件
以文本文件的形式打开输入的文件路径
将strTextLine设置为字符串
作为变体的暗维它
行输入#1,strTextLine
vItem=拆分(strTextLine,Chr(10))
'逐行清理垃圾信息文件
对于n=LBound(vItem)到UBound(vItem)

'在此插入适当的条件-在本例中,如果字符串“”我似乎无法提取pdf的文本字符串“-你到底是什么意思?您的代码是否什么也找不到,或者无法正确处理找到的内容?你有什么错误吗?如果是,哪一个,在哪一行?非常感谢。正如你所说,它能满足我目前的需求,这太棒了!将来,我想对PDF进行更改,因此需要获取整个字符串,以便可以对其进行操作。根据上面的解决方案,我想复制您的行输入方法,但不基于字符“106处的字符可能是某种不可见的Ascii字符。请尝试使用
Asc([string])在即时窗口中输出它如果代码是正确的,您可以在代码>行输入1,StrutReals>代码>:<代码>替换(StrutLead,CHR([非法ASCII字符代码),VbNullstring)< /代码>之后,简单地添加这行代码。如果这对您有用的话,请考虑接受这个答案。