11
votes

Liste de livres - Obtenir des détails du livre à partir d'Amazon à l'aide d'Excel VBA Barcode Recherches

J'ai un lecteur de codes à barres et un tas de livres. Pour chacun des livres, je souhaite énumérer le nom du livre et l'auteur dans une feuille de calcul Excel.

Mon point de vue est que certains codes VBA se connectant à un service Web Amazon faciliteraient cela.

Mes questions est - n'a-t-elle pas fait cela auparavant? Pourriez-vous me signaler au meilleur exemple.


0 commentaires

4 Réponses :


-1
votes

Si le code à barres est l'ISBN, qui semble probable, peut-être que vous pouvez utiliser: Amazon.com/advanced-search-books/b?ie=utf8&node=241582011


4 commentaires

Je suppose que le problème op est comment obtenir le titre du livre dans une cellule


Accrocher des informations d'une page Web à l'aide d'Excel est souvent affichée. Il ne devrait donc pas être une recherche difficile.


n'a rien trouvé vraiment utile pour analyser HTML dans VBA. J'ai écrit une réponse en utilisant XML. N'oubliez-vous pas de partager un bon pointeur pour une analyse HTML dans VBA dans votre réponse (pas la solution .QRY qui s'écoule uniquement avec des tables!)? Tnx!


Pour une référence future ici Stackoverflow.com/questions/4061656/... est une bonne suggestion dans les réponses



16
votes

Je pensais que c'était facile à googler, mais il s'est avéré plus difficile que prévu.

En fait, je n'ai pas pu trouver un programme basé sur ISBN VBA pour obtenir des données de livres sur le Web, alors décidé de faire une. P>

Voici une macro VBA utilisant les services de xisbn.worldcat.org . Exemples ici. . Les services sont libres et n'ont pas besoin d'authentification. P>

Pour pouvoir l'exécuter, vous devez vérifier sur Outils-> Références (dans la fenêtre VBE), la bibliothèque "Microsoft XML 6.0". P>

Cette macro prend l'ISBN (10 chiffres) de la cellule actuelle et remplit les deux colonnes suivantes avec l'auteur et le titre. Vous devriez être capable de boucler facilement une colonne complète. P>

Le code a été testé (puits, un peu), mais il n'y a pas de vérification d'erreur. P>

 Sub xmlbook()
 Dim xmlDoc As DOMDocument60
 Dim xWords As IXMLDOMNode
 Dim xType As IXMLDOMNode
 Dim xword As IXMLDOMNodeList
 Dim xWordChild As IXMLDOMNode
 Dim oAttributes As IXMLDOMNamedNodeMap
 Dim oTitle As IXMLDOMNode
 Dim oAuthor As IXMLDOMNode
 Set xmlDoc = New DOMDocument60
 Set xWords = New DOMDocument60
 xmlDoc.async = False
 xmlDoc.validateOnParse = False
 r = CStr(ActiveCell.Value)

 xmlDoc.Load ("http://xisbn.worldcat.org/webservices/xid/isbn/" _
              + r + "?method=getMetadata&format=xml&fl=author,title")

 Set xWords = xmlDoc

     For Each xType In xWords.ChildNodes
         Set xword = xType.ChildNodes
         For Each xWordChild In xword
             Set oAttributes = xWordChild.Attributes
             On Error Resume Next
             Set oTitle = oAttributes.getNamedItem("title")
             Set oAuthor = oAttributes.getNamedItem("author")
             On Error GoTo 0
         Next xWordChild
     Next xType
  ActiveCell.Offset(0, 1).Value = oTitle.Text
  ActiveCell.Offset(0, 2).Value = oAuthor.Text
 End Sub


1 commentaires

Exactement ce que je cherchais! La fonctionnalité POWER PIVOT NO-REFRESF est damnée! ;)



3
votes

Ceci est énormément serviable pour moi!

J'ai mis à jour la macro pour lui permettre de parcourir une colonne de chiffres ISBN jusqu'à ce qu'il atteigne une cellule vide. P>

Il rechercher également l'éditeur, l'année et l'édition. P>

J'ai ajouté une vérification des erreurs de base si certains champs ne sont pas disponibles. p>

Sub ISBN()
 Do
 Dim xmlDoc As DOMDocument60
 Dim xWords As IXMLDOMNode
 Dim xType As IXMLDOMNode
 Dim xword As IXMLDOMNodeList
 Dim xWordChild As IXMLDOMNode
 Dim oAttributes As IXMLDOMNamedNodeMap
 Dim oTitle As IXMLDOMNode
 Dim oAuthor As IXMLDOMNode
 Set xmlDoc = New DOMDocument60
 Set xWords = New DOMDocument60
 xmlDoc.async = False
 xmlDoc.validateOnParse = False
 r = CStr(ActiveCell.Value)

 xmlDoc.Load ("http://xisbn.worldcat.org/webservices/xid/isbn/" _
              + r + "?method=getMetadata&format=xml&fl=author,title,year,publisher,ed")

 Set xWords = xmlDoc

     For Each xType In xWords.ChildNodes
         Set xword = xType.ChildNodes
         For Each xWordChild In xword
             Set oAttributes = xWordChild.Attributes
             On Error Resume Next
             Set oTitle = oAttributes.getNamedItem("title")
             Set oAuthor = oAttributes.getNamedItem("author")
             Set oPublisher = oAttributes.getNamedItem("publisher")
             Set oEd = oAttributes.getNamedItem("ed")
             Set oYear = oAttributes.getNamedItem("year")
             On Error GoTo 0
         Next xWordChild
     Next xType
  On Error Resume Next
  ActiveCell.Offset(0, 1).Value = oTitle.Text

  On Error Resume Next
  ActiveCell.Offset(0, 2).Value = oAuthor.Text

  On Error Resume Next
  ActiveCell.Offset(0, 3).Value = oPublisher.Text

  On Error Resume Next
  ActiveCell.Offset(0, 4).Value = oYear.Text

  On Error Resume Next
  ActiveCell.Offset(0, 5).Value = oEd.Text


  ActiveCell.Offset(1, 0).Select
  Loop Until IsEmpty(ActiveCell.Value)

 End Sub


0 commentaires

2
votes

Je viens de trouver ce fil comme je tentais de faire la même chose. Malheureusement, je suis sur un Mac, alors ces réponses ne vous aident pas. Avec un peu de recherche, j'ai pu faire le faire pour travailler dans Mac Excel avec ce module:

Option Explicit

' execShell() function courtesy of Robert Knight via StackOverflow
' http://stackoverflow.com/questions/6136798/vba-shell-function-in-office-    2011-for-mac

Private Declare Function popen Lib "libc.dylib" (ByVal command As String,       ByVal mode As String) As Long
Private Declare Function pclose Lib "libc.dylib" (ByVal file As Long) As Long
Private Declare Function fread Lib "libc.dylib" (ByVal outStr As String, ByVal size As Long, ByVal items As Long, ByVal stream As Long) As Long
Private Declare Function feof Lib "libc.dylib" (ByVal file As Long) As Long

Function execShell(command As String, Optional ByRef exitCode As Long) As String
    Dim file As Long
    file = popen(command, "r")

    If file = 0 Then
        Exit Function
    End If

    While feof(file) = 0
        Dim chunk As String
        Dim read As Long
        chunk = Space(50)
        read = fread(chunk, 1, Len(chunk) - 1, file)
        If read > 0 Then
            chunk = Left$(chunk, read)
            execShell = execShell & chunk
        End If
    Wend

    exitCode = pclose(file)
End Function

Function HTTPGet(sUrl As String) As String

    Dim sCmd As String
    Dim sResult As String
    Dim lExitCode As Long
    Dim sQuery As String

    sQuery = "method=getMetadata&format=xml&fl=*"
    sCmd = "curl --get -d """ & sQuery & """" & " " & sUrl
    sCmd = "curl --get -d """ & sQuery & """" & " " & sUrl

    sResult = execShell(sCmd, lExitCode)

    ' ToDo check lExitCode

    HTTPGet = sResult

End Function

Function getISBNData(isbn As String) As String
  Dim sUrl As String
  sUrl = "http://xisbn.worldcat.org/webservices/xid/isbn/" & isbn
  getISBNData = HTTPGet(sUrl)

End Function



Function getAttributeForISBN(isbn As String, info As String) As String
  Dim data As String
  Dim start As Integer
  Dim finish As Integer


 data = getISBNData(isbn)
 start = InStr(data, info) + Len(info) + 2
 finish = InStr(start, data, """")
 getAttributeForISBN = Mid(data, start, finish - start)


End Function


0 commentaires