web-dev-qa-db-fra.com

RECHERCHEV vs IMPORTHTML

Je rencontre un problème de script Google Apps avec [~ # ~] vlookup [~ # ~] sur certaines données générées par le [~ # ~] importhtml [~ # ~] fonction.

Pour les interactions utilisateur normales, cela ne semble pas être un problème, mais les scripts accédant à la cellule [~ # ~] vlookup [~ # ~] renvoient parfois # N/A même si vous pouvez voir clairement les données dans la cellule et dans [~ # ~] vlookup [ ~ # ~] données. Cela semble se produire après avoir utilisé la feuille pendant plus de 20 minutes environ. Je dirais que cela se produit environ 20% du temps.

Forcer le [~ # ~] importhtm [~ # ~] L à rafraîchir a environ 50 à 50 chances de résoudre le problème et parfois vous devez faites-le deux fois. Lorsque cela ne fonctionne pas, nous fermons et rouvrons la feuille.

Je tire les données d'un appel de script très simple "theSheet.getRange ( theRow, 10) .getDisplayValue ()" et je suis sûr que theRow est correctement réglé sur une vraie ligne.

Quelqu'un d'autre a-t-il vu cela et pouvez-vous nous conseiller sur une solution possible?

L'onglet [RawData] est masqué avec les données dérivées de "IMPORTHTML (" http://www.foobar.org/Ajax.php?Act=7 "," table ", 2)" avec une plage nommée de CustData et finit par ressembler à:

RawData

Le vlookup est simplement " = vlookup (A7, RawData! K: L, 2, true) " avec A7 étant une validation des données menu déroulant.

Le code qui obtient le # N/A est l'attribut CustomerSSID : dans l'extrait ci-dessous qui est appelé à partir d'un déclencheur OnEdit:

var theData =
{
  DSAmClean: PropertiesService.getUserProperties().getProperty('DSAmClean'),
  ServerIP: theSheet.getRange('ServerIP').getDisplayValue(),
  ServerPort: theSheet.getRange('ServerPort').getDisplayValue(),
  SheetName: theSheet.getName(),
  Row: theRow, 
  Col: theCol,
  Notes: theNotes,
  colTitle: theSheet.getRange(2,theCol).getValue(),
  cellValue: theSheet.getRange(theRow,theCol).getDisplayValue(),
  DeliveryDate: theSheet.getRange(theRow,1).getDisplayValue(),
  CustomerName: theSheet.getRange(theRow,2).getDisplayValue(),
  CustomerSSID: theSheet.getRange(theRow,3).getValue(),
  ProdSSID: theSheet.getRange(theRow,4).getDisplayValue(),
  ProductShipped: theSheet.getRange(theRow,5).getDisplayValue().toString(),
  ContractSales: theSheet.getRange(theRow,6).getDisplayValue(),
  OriginPoint: theSheet.getRange(theRow,7).getDisplayValue(),
  VendorName: theSheet.getRange(theRow,8).getDisplayValue(),
  VendorSSID: getSSIDFromVendorName(theSheet.getRange(theRow,8).getDisplayValue()),
  Margin: theSheet.getRange(theRow,9).getValue(),
  FOBPrice: theSheet.getRange(theRow,10).getValue(),
  PurchaseContract: theSheet.getRange(theRow,11).getDisplayValue(),
  LoadNumber: theSheet.getRange(theRow,12).getDisplayValue(),
  TruckingCompany: theSheet.getRange(theRow,13).getDisplayValue(),
  TruckingRate: theSheet.getRange(theRow,14).getValue(),
  ShippingWeight: theSheet.getRange(theRow,15).getValue(),
  FreightTotal: theSheet.getRange(theRow,16).getValue()
}

Bien sûr, la colonne 3 contient le Vlookup .

1
BigMikeL

Je pense que l'approche la plus fiable dans des cas comme le vôtre est d'éviter d'utiliser des fonctions comme IMPORTHTML, IMPORTRANGE, etc. car elles ne sont pas actualisées à chaque recalcul ou pour forcer la "régénération" des formules correspondantes avant le code de ligne qui dépend de résultats de ces formules.

0
Rubén