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

时间:2018-06-20 10:48:46

标签: vba excel-vba pdf excel

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

使用VBA,我已打开PDF作为文本文件,然后提取文本并将其另存为VBA中的字符串变量。我想通读这段文字以找到特定的元素。一条折线(称为sTreamTrain),然后使用InStr函数获得折线的顶点。

当我向折线添加更多顶点时,我似乎无法提取pdf的文本字符串。我收到错误“运行时错误62”,我不明白它的意思或PDF更改为现在有此错误。

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

链接: https://drive.google.com/open?id=1zOhwnFWZZfy9bTAxKiQFSl7qiQLlYIJV

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

Sub CoordExtractor_TestBuild01()

“打开PDF并获取坐标

将TextFile设置为整数 昏暗的FilePath作为字符串 昏暗的FileContent作为字符串

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

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

'以读取状态打开文本文件   打开FilePath作为文本文件输入

'将文件内容存储在变量中 暗淡的温度只要 Temp = LOF(TextFile)

FileContent = Input(LOF(TextFile),TextFile)

'纯文本文件   关闭TextFile

结束子

我希望有人让我知道在这种情况下是什么运行时错误62,并提出任何工作流程以解决该问题。另外,我想知道是否有些字符不能存储为字符串? -当我将顶点的数量增加到一定数量以上时,可能包括了这些。

我也希望保持脚本简单而不使用外部库,因为我想在完成脚本后共享脚本,以便其他人可以使用它,从而在没有额外依赖项的情况下使用脚本更加简单,但是,任何和所有欢迎咨询,因为这只是该项目的前半部分。

非常感谢。

1 个答案:

答案 0 :(得分:0)

根据MSDN documentation,此错误是由包含

的文件引起的
  

...文件末尾的空格或多余的返回值或语法   不正确。

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

您可以在处理宏之前清除文件内容,方法是将宏顶部的代码替换为下面的代码。这样,我可以从您的Document16.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