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. p>
Mon point de vue est que certains codes VBA se connectant à un service Web Amazon faciliteraient cela. p>
Mes questions est - n'a-t-elle pas fait cela auparavant? Pourriez-vous me signaler au meilleur exemple. p>
4 Réponses :
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 P>
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
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
Exactement ce que je cherchais! La fonctionnalité POWER PIVOT NO-REFRESF est damnée! ;)
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
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