我正在尝试开发一个 VBA 脚本,该脚本从 excel 2010 电子表格中获取期刊标题的 ISSN 编号,并查询 Sherpa/Romeo 网络服务(版权政策数据库)。然后,它使用每个标题的自存档策略填充电子表格。
虽然它适用于我的测试电子表格中的大多数行,但我似乎无法获得一堆期刊标题的信息。巧合的是,他们都是一个出版商,我不确定它是否会有所作为,因为它是 XML。我认为我的代码一定有问题,但我无法确定为什么当存在日志标签时它认为 "resp.getElementsByTagName("journal").Length" 为 0。这是未按预期工作的 ISSN 的 XML 结果的链接。我试图将它与那些有效的结果进行比较,我看不出有任何区别。
我对这一切都很陌生,任何提示将不胜感激。我希望有人能帮帮忙 :)
这是一个 ISSN 列表,我把 ** 放在那些在“期刊”标签中有数据但没有被选中的那些旁边。
0387-7604 **
1864-7782
1932-6203
0927-5568
0302-9743
1687-725X
0302-9743
0387-7604
0302-9743
1871-5192 **
1448-0220
1550-2783
1466-853X **
1438-4639 **
1642-431X
0142-0615
0096-140X
1746-1391
1096-3480
1065-9471
0260-2938
1055-9965
1084-8045 **
我的代码:
Private Sub btnCopyright_Click()
Dim wsISSN As Worksheet
Set wsISSN = ThisWorkbook.Sheets("ISSN_2")
Dim ISSN As String
Dim URL As String
Dim baseURL As String
baseURL = "http://www.sherpa.ac.uk/romeo/api29.php?" 'I removed my API key'
Dim i As Integer
Dim Last As Integer
i = 1
Last = wsISSN.Range("D6000").End(xlUp).Row
If Last = 1 Then Exit Sub
For i = 2 To Last 'second row to last row'
Dim req As New xmlhttp
ISSN = Cells(i, 4).Value
If ISSN = "Invalid" Or ISSN = "" Then
GoTo skipISSN
End If
URL = baseURL & "&issn=" & ISSN
req.Open "GET", URL, False
req.Send
Debug.Print (req.ResponseText)
Dim resp As New DOMDocument
resp.LoadXML req.ResponseText
Debug.Print (resp.getElementsByTagName("journal").Length)
If resp.getElementsByTagName("journal").Length = 0 Then
Cells(i, 5).Value = "unknown"
Cells(i, 6).Value = "unknown"
Cells(i, 7).Value = "unknown"
Cells(i, 8).Value = "unknown"
Cells(i, 9).Value = "unknown"
Cells(i, 10).Value = "unknown"
Cells(i, 11).Value = "unknown"
GoTo skipISSN
End If
Dim preprint As String
Dim preRest As String
Debug.Print (resp.getElementsByTagName("prearchiving").Length)
If resp.getElementsByTagName("prearchiving").Length = 0 Then
Cells(i, 5).Value = "-"
Else
preprint = resp.SelectSingleNode("//preprints/prearchiving").Text
If preprint = "can" Then
Cells(i, 5).Value = "Yes"
ElseIf preprint = "restricted" Then
Cells(i, 5).Value = "restricted"
Else
Cells(i, 5).Value = "unknown"
End If
End If
'any restrictions for archiving preprint?'
Debug.Print (resp.getElementsByTagName("prerestrictions").Length)
If resp.getElementsByTagName("prerestrictions").Length = 0 Then
Cells(i, 6).Value = "-"
Else
preRest = resp.SelectSingleNode("//preprints/prerestrictions").Text
Debug.Print (preRest)
If preRest <> "" Then
Cells(i, 6).Value = preRest
Else
Cells(i, 6).Value = "none"
End If
End If
'is postprint allowed?'
Dim postprint As String
Dim postRest As String
Debug.Print (resp.getElementsByTagName("postarchiving").Length)
If resp.getElementsByTagName("postarchiving").Length = 0 Then
Cells(i, 7).Value = "-"
Else
postprint = resp.SelectSingleNode("//postprints/postarchiving").Text
If postprint = "can" Then
Cells(i, 7).Value = "Yes"
ElseIf postprint = "restricted" Then
Cells(i, 7).Value = "restricted"
Else
Cells(i, 7).Value = "unknown"
End If
End If
'any restrictions for archiving postprint?'
Debug.Print (resp.getElementsByTagName("postrestrictions").Length)
If resp.getElementsByTagName("postrestrictions").Length = 0 Then
Cells(i, 8).Value = "-"
Else
postRest = resp.SelectSingleNode("//postprints/postrestrictions").Text
Debug.Print (postRest)
If postRest <> "" Then
Cells(i, 8).Value = postRest
Else
Cells(i, 8).Value = "none"
End If
End If
'is publishers version allowed?'
Dim allCond As String
Debug.Print (resp.getElementsByTagName("condition").Length)
If resp.getElementsByTagName("condition").Length = 0 Then
Cells(i, 9).Value = "-"
Cells(i, 10).Value = "-"
Cells(i, 11).Value = "-"
Else
allCond = resp.SelectSingleNode("//conditions").Text
Debug.Print (allCond)
If InStr(allCond, "embargo") > 0 Then
Cells(i, 9).Value = "maybe"
Cells(i, 10).Value = "yes"
Cells(i, 11).Value = allCond
ElseIf InStr(allCond, "Publisher's version/PDF may be used") = 0 Then
Cells(i, 9).Value = "no"
Cells(i, 10).Value = "-"
Cells(i, 11).Value = allCond
ElseIf InStr(allCond, "Publisher's version/PDF may be used") > 0 Then
Cells(i, 9).Value = "yes"
Cells(i, 10).Value = "-"
Cells(i, 11).Value = allCond
ElseIf allCond = "" Then
Cells(i, 9).Value = "-"
Cells(i, 10).Value = "-"
Cells(i, 11).Value = "-"
Else
Cells(i, 9).Value = "-"
Cells(i, 10).Value = "-"
Cells(i, 11).Value = allCond
End If
End If
skipISSN:
Next i
End Sub