@dovid אני כתבתי את הקוד המדובר 
ולעניות דעתי אין בו קריאות מיותרות
יש קריאה אחת בהתחלה לקבל את כל הנתונים כמערך דו מימדי (ככה הם קוראים לזה), זה נצרך בגלל שהקוד מחפש שורה שעומדת בתנאים מסוימים
ובסיום יש קריאה נוספת לעדכון
האמת שבמקור עשיתי בבת אחת עדכון לכל השורה (כלומר getRange לכל השורה ואז setValues), כאשר היכן שאין מה לעדכן (לא נשלח ערך חדש עבור התא) מכניס את התוכן המקורי (שהתקבל בקריאה הראשונה),
ועכשיו שיניתי כך שיעדכן רק היכן שיש צורך, כך שזה במקום קריאה אחת לעדכון של כל השורה, יש בין 1 ל7 (תלוי בכמות התאים שמתעדכנים) קריאות קטנות כדי לעדכן כל תא, אבל מבדיקה שלי זה לא גורם לאיטיות, נראה שבאמת לוקח לסקריפט זמן לפעול
למעשה זה החלקים היחידים שמתקשרים עם השיטס:
const sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName(sheetName);
const table = sheet.getDataRange().getValues();
בהתחלה, כאשר לא מדובר בגליון גדול
ואז לוגיקה די פשוטה של JS, ובסוף
for (const [i, call] of row.entries()) {
if (call !== 'original-value') {
sheet.getRange(rowIndex + 2, i + 1, 1, 1).setValue([call]);
}
}
או:
sheet.deleteRow(rowIndex + 2);