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