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 à:
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 .
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.