Мне недавно пришлось сделать именно это, когда мы проиндексировали нашу библиотеку для страховых целей. Ниже приведен код взломанного вместе класса vba:
Option Compare Database
dim BookTitle As String
dim BookTitleLong As String
dim BookAuthorsText As String
dim BookPublisherText As String
dim BookSummary As String
dim BookNotes As String
dim accessKey As String
Private Sub Class_Initialize()
'Your isbnDB access key'
accessKey = "PUT ACCESSKEY HERE"
End Sub
Property Get Title() As String
Title = BookTitle
End Property
Property Get TitleLong() As String
TitleLong = BookTitleLong
End Property
Property Get AuthorsText() As String
AuthorsText = BookAuthorsText
End Property
Property Get PublisherText() As String
PublisherText = BookPublisherText
End Property
Property Get Summary() As String
Summary = BookSummary
End Property
Property Get Notes() As String
Notes = BookNotes
End Property
Public Function Lookup(isbn As String) As Boolean
Lookup = False
Dim xmlhttp
Set xmlhttp = CreateObject("MSXML2.xmlhttp")
xmlhttp.Open "GET", "https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn, False
xmlhttp.send
'Debug.Print "Response: " & xmlhttp.responseXML.XML'
Dim xmldoc
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.async = False
'Note: the ResponseXml property parses the server's response, responsetext doesn't
xmldoc.loadXML (xmlhttp.responseXML.XML)
If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") = 0) Then
MsgBox "Invalid ISBN or not in database"
Exit Function
End If
If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") > 1) Then
MsgBox "Caution, got more than one result!"
Exit Function
End If
BookTitle = xmldoc.selectSingleNode("//BookData/Title").Text
BookTitleLong = xmldoc.selectSingleNode("//BookData/TitleLong").Text
BookAuthorsText = xmldoc.selectSingleNode("//BookData/AuthorsText").Text
BookPublisherText = xmldoc.selectSingleNode("//BookData/PublisherText").Text
BookNotes = xmldoc.selectSingleNode("//BookData/Notes").Text
BookSummary = xmldoc.selectSingleNode("//BookData/Summary").Text
Lookup = True
End Function
Получите ключ API, вставьте приведенный выше код (вместе с вашим ключом) в новый модуль классов в редакторе VBA (Insert-> Class Module) и назовите модуль «isbn». Вам также необходимо добавить ссылку на «Microsoft XML» в редакторе VBA (Инструменты-> Ссылки)
Вы можете проверить его работу с фрагментом кода ниже в обычном модуле vba:
* +1007 *
Затем просто введите «testlookup» в непосредственное окно (View-> Immediate Window). Вы должны увидеть ответ:
The Times book of quotations
[Glasgow] : Times Books : 2000.
isbnDB может вернуть больше данных, которые я собираю в вышеприведенном классе, прочитайте ссылку на API здесь: http://isbndb.com/docs/api/ и адаптируйте класс под свои нужды.
Я нашел эту статью очень полезной для объяснения того, как использовать xmlhttp изнутри доступа:
http://www.15seconds.com/issue/991125.htm
Были также полезны страницы MSDN о методах XML DOM и объекте XMLHttpRequest (поскольку я новый пользователь, я могу публиковать только две активные ссылки, вам придется заменить точки в URL-адресах ниже):
msdn microsoft com / en-us / library / ms757828 (v = VS.85) .aspx
msdn microsoft com / en-us / library / ms535874 (v = vs.85) .aspx