web-dev-qa-db-fra.com

Erreur d'insertion (ou d'espacement) lorsque IMPORTXML ne peut pas gratter les données dans Google Sheets

J'utilise IMPORTXML pour créer ce qui est essentiellement un fichier de flux d'inventaire de véhicules.

Mon problème survient lorsqu'un prix n'est pas inclus sur notre site Web principal. Ce qui se passe apparemment, c'est que lorsque le prix n'est pas inclus, le IMPORTXML saute celui-ci, sans aucune erreur ou quoi que ce soit, et avec le prochain prix qu'il trouve à sa place sur la feuille.

C'est un problème car nous essayons d'aligner ces camions avec leur vin, PDSF, prix, etc.

https://docs.google.com/spreadsheets/d/1KceS3krlbpU2FjQly-tK8N5qiwshIq3rQFQ36WRNV5U/edit?usp=sharing

Pour donner un exemple précis dans ma fiche ce numéro de vin: 1FTMF1E5XKKE62311 n'a actuellement pas de prix indiqué sur notre site. Au lieu d'insérer une cellule vide ou une erreur, le IMPORTXML insère le prix de l'unité indiquée après cela. Cela crée un groupe de prix vierges à la fin de la feuille, même si les prix de ces véhicules sont sur notre site Web. Fondamentalement, cela jette la feuille entière après le premier prix ignoré.

Voici comment nous tirons actuellement sur le prix d'Internet:

=IFERROR({IMPORTXML(A4,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A5,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A6,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A7,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A8,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A9,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A10,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']");
 IMPORTXML(A11,"//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']")},"")

Nous espérions que le gestionnaire d'erreurs fonctionnerait, mais malheureusement, cela n'a pas fonctionné. Quelqu'un a-t-il une idée de la façon dont nous ne violerions pas la commande d'importation lorsqu'il y a un prix qui n'est pas indiqué?

Tout conseil serait très apprécié!!

mise à jour a changé la feuille ci-dessus pour être modifiable par n'importe qui si vous souhaitez faire une colonne et lui donner un coup de feu

1
Brian L
  • pour éviter les erreurs littérales de tableau, il devrait être:
=QUERY({
 IFERROR(IMPORTXML(A4,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A5,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A6,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A7,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A8,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A9,  "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A10, "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "");
 IFERROR(IMPORTXML(A11, "//div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']"), "")}, 
 "where Col1 is not null", 0)
0
user0

Edit: a trouvé un moyen de repérer les données manquantes


Réponse originale:
Il n'y a pas d'erreur car il n'y a pas de données: IMPORTXML récupère toutes les données correspondant à une requête Xpath spécifique et n'affichera rien s'il n'y a rien.
Conclusion: IFERROR est inutile ici. Cependant, ce que vous pouvez faire est de concaténer vos requêtes IMPORTXML en utilisant | Comme ceci:

=IMPORTXML(A4,"//h2[@class='vehicleTitle margin-x']/a/span[@class='notranslate']")
=IMPORTXML(A4,"//div[@class='col-xs-12 visible-xs margin-top-1x']/ul/li/span[@style='text-decoration:line-through;'][@class='pull-right']")
etc....

Devient

     =IMPORTXML(A4,"//h2[@class='vehicleTitle margin-x']/a/span[@class='notranslate'] |
 //div[@class='col-xs-12 visible-xs margin-top-1x']/ul/li/span[@style='text-decoration:line-through;'][@class='pull-right'] |
 //div[@class='col-xs-12 visible-xs margin-top-1x']//li[@class='vinDisplay']/span | 
 //div[@class='col-xs-12 visible-xs margin-top-1x']//span[@style='font-weight:bold;font-size:1.2em;'][@class='pull-right primaryPrice']
")

Le résultat est un tableau comme celui-ci:

2019 Ford F-150 XL
$30,045
$20,427
1FTMF1CB6KKC12430
2019 Ford F-150 XL
$30,045
$20,427
1FTMF1CB8KKC12381
2019 Ford F-150 XL
$31,450
$21,846
1FTMF1CBXKKD26088
...
  and then where there's no data for the price : 
...
2019 Ford F-150 XLT
$54,200
$39,758
1FTEW1E53KKC32677
2019 Ford F-150 XL    here's the vehicle 
1FTMF1E5XKKE62311     VIM but no price
2019 Ford F-150 XLT
$53,620
$39,853
1FTEW1E43KKD96874

Il suffit de trouver une solution pour réorganiser les données.


Edit: Solution pour réorganiser les données.

À côté de la colonne de résultat B2:B, Je mets cette formule dans C2 Puis je la développe =countif(arrayformula(regexmatch(INDIRECT("B2:B"&ROW(B2)),"Ford")),true) Elle incrémente un compteur pour chaque nouveau nom de véhicule avec le mot clé Ford.

Counter for each new vehicule

Ensuite, j'ai utilisé la même idée pour créer un tableau pour chaque entrée:

=transpose(FILTER($B$2:$B$401,$C$2:$C$401=row(A1)))

Le résultat final quand il manque des données:

Array with the missing data

0
pjmg