Unele celule de calcul tabelar nu au fost actualizate înainte ca funcția de declanșare să trimită e-mailuri

Am o foaie de calcul care extrage și acumulează toate datele necesare din celelalte 6 foi de calcul folosind formulele Vmerge și Query și toate datele consolidate vor fi convertite în fișiere pdf și emaild la ID-urile poștale utilizând evenimentul de declanșare.

Aici începe problema de fiecare dată când mesajul de post atașat conține toate anteturile și alt format, dar datele extrase nu apar. Se pare ca - sa deschida aceeasi foaie de calcul, dupa un timp toate codurile <-> sunt inlocuite de date/Speranta toate actualizarile de date dupa o perioada de deschiderea foii de calcul.

link pentru foaie

screenshot

Poate cineva să mă direcționeze pentru a rezolva această problemă.

For this solution should be -> all the data should be updated and then the email script should work; or either it should update before emailing script starts.

Sau orice alte idei mai bune sunt apreciate.

1
Da, este un script de aplicații. Ai trecut prin
adăugat autor Jimson Jose, sursa
Da, am făcut-o. Mulțumesc
adăugat autor Jimson Jose, sursa
Acest script pe care l-ați menționat, este un script Google Apps?
adăugat autor Henrique G. Abreu, sursa
Ați reușit să getLastRow să funcționeze?
adăugat autor Henrique G. Abreu, sursa

1 răspunsuri

Unele formule de foi de calcul, precum ImportRange și ImportXml (și, de asemenea, formulele personalizate Apps Script) sunt evaluate numai când există cineva conectat în foaia de calcul. Este ca și cum aceste funcții au nevoie de un cont care trebuie evaluat, de exemplu, în importRange , contul înregistrat trebuie să aibă acces la intervalul de importat dacă împărțiți această foaie de calcul cu o persoană, dar nu cu importRange , atunci când această persoană vizualizează această foaie de calcul, funcția importRange nu va funcționa (bine, dacă nu sunteți în foaia de calcul, iar formulele au fost deja evaluate).

Linia de fund este că nu puteți avea aceste formule și să utilizați un script declanșat în timp (sau altă declanșare care nu necesită conectarea unei persoane) și așteptați ca scriptul să poată citi aceste date.

Totuși, soluția este destul de simplă. Fă ce face funcția importRange în interiorul scriptului tău! de exemplu.

var source = SpreadsheetApp.openById('source-spreadsheet-key');
var data = source.getSheetByName('List').getRange('I6:AT500').getValues();
//then save it somewhere
var s = Spreadsheet.getActive().getSheetByName('hidden-import');
s.getRange('I6:AT500').setValues(data);
SpreadsheetApp.flush(); //force the data to be written
//so all the other formulas on your spreadsheet get updated with the new data

Toate formulele dvs. "logice", cum ar fi query și vmerge , care sunt dificil de imitat de script, pot fi lăsate pe foaia de calcul, foaia pe care tocmai am inventat-o ​​în loc de a importa direct importRange .

[modifică]

Pentru a copia numai rândurile care nu sunt goale, procedați astfel:

var data = SpreadsheetApp.openById('source-spreadsheet-key').
  getSheetByName('List').getDataRange().getValues();
Spreadsheet.getActive().getSheetByName('hidden-import').
  getRange(1,1,data.length,data[0].length).setValues(data);
2
adăugat
Vă mulțumim pentru sprijin și sugestie. Pentru același lucru mă puteți îndruma cu un script pentru a copia numai rândurile goale. deoarece scenariul copiază toate, inclusiv și pe cele goale.
adăugat autor Jimson Jose, sursa
Vă mulțumim încă o dată că am pierdut doar în încercarea de a extrage dintr-o anumită (prima coloană și rând la coloană + ultima) de exemplu, i7: AT + {ultimul rând}. Dar nu am reușit să reușesc. puteți pls să mă ajute.
adăugat autor Jimson Jose, sursa
Vă mulțumesc pentru tot ce ați făcut pentru mine Mr. Henrique Abreu. Sper că ați înțeles interogarea mea. am încercat, dar îndoiala mea a fost cum să extrageți ultimul număr de rând înainte de linia 'code' var data = source.getSheetByName ('List') getRange ('I6: AT500') getValues ​​& zwnj; este executat. acest lucru am doar cerere. dacă sunteți dispus sau nu sunteți dispus să vă mulțumesc pentru fapta voastră. Și vă rog să rețineți că nu vă insist, așa cum știu eu, doar că cer ajutor pentru asta. Îmi pare foarte rău dacă te-am rănit cu engleza mea.
adăugat autor Jimson Jose, sursa
Vă mulțumesc foarte mult că m-ați călăuzit. Pentru a fi cinstit pana acum nu stiam niciodata "votarea", pentru ca acum cu siguranta voi raspunde si voi vota. Așa cum am răspuns mai devreme la extragerea rândurilor care nu sunt goale. Am încercat, dar scriptul copiază toate datele, inclusiv rândurile goale. ați putea confirma încă o dată pentru mine. Mulțumesc anticipat
adăugat autor Jimson Jose, sursa
Cu ajutorul dvs., am votat tuturor celor care m-au ajutat în munca mea de scripting. Iti multumesc inca o data.
adăugat autor Jimson Jose, sursa
Am inclus acest lucru în răspunsul meu.
adăugat autor Henrique G. Abreu, sursa
Din fragmentul pe care l-am lipit, ar trebui să puteți face acest lucru singur. Ceea ce cereți nu mai este îndoielnic, vrei doar să o fac pentru tine. Ar trebui să citiți tutorialele și documentația Script-urilor Script pentru a afla cum să le faceți singuri: developers.google. com/apps-script/articole
adăugat autor Henrique G. Abreu, sursa
Bine, îmi pare rău că sunt aspru. Uitați-vă la docs aici: developers.google.com/apps-script/class_sheet# getLastRow (apropo, văd că niciodată nu ai nici un răspuns la întrebările tale despre stackoverflow acceptat, ar trebui să faci atunci când simți că ai un răspuns bun, votul este, de asemenea, important).
adăugat autor Henrique G. Abreu, sursa