המטרה
לתת לצוות ממשק עריכה ממוקד על גיליון תפעולי גדול — להציג רק את העמודות הרלוונטיות, לסנן לפי XO ו-Unit, ולאפשר עריכה רק לשתי עמודות ספציפיות (XO Updated, XO Notes) בלי לסכן את השאר.
הפתרון
פרויקט Apps Script עם שני משטחים: Data Manager מודאלי מתפריט גיליון (onOpen → 'Open Manager') ו-deployment web-app דרך doGet. Code.gs חושף CONFIG עם DISPLAY_COLUMNS, FILTER_COLUMNS ו-EDITABLE_COLUMNS. getAllData מחזיר JSON מנורמל ל-HTML UI; ה-handlers מקבלים כתיבה רק ל-whitelist.
עיקרי הדברים
- HTML אחד משותף למודאל ול-web app
- Whitelist עמודות בקוד מסלק דריסות בטעות
- רפרנסי עמודות מונחי-config שורדים גדילת גיליון
האתגר
הצוות נזקק לעריכה מהירה של שתי עמודות, אבל המשיך לדרוס עמודות נוסחה ו-PK בגיליון הגולמי.
משטח עריכה אכוף בקוד: ה-HTML מציג את כל העמודות הרלוונטיות, אבל רק EDITABLE_COLUMNS (R, S) חושפות inputs; ה-handlers בצד השרת דוחים כתיבה לכל עמודה אחרת לפי אות.
Power users רצו את המנהל בתוך הגיליון; אחרים רצו web app bookmarkable — בלי לתחזק שני UIs.
Interface.html אחד שנצרך ע"י showDataManager (מודאל) ו-doGet (web app). אותו HTML, אותו API, שתי נקודות כניסה — בלי כפילות.
אם משתמשים הוסיפו עמודה, רפרנסים קשיחים היו שוברים את הקריאה.
effectiveLastCol = Math.max(lastCol, maxConfigCol) + getMaxColumnCount(CONFIG.COLUMNS) מבטיחים שטווחי קריאה מכסים את כל העמודות המוגדרות.
מה נמסר
- Code.gs עם config, doGet, מודאל, handlers ולוגים
- Interface.html משותף
- appsscript.json עם OAuth scopes
- הערות פריסה
תוצאות
2 (modal + web app)
משטחים
13 display / 2 filter / 2 edit
Whitelist
מה זה לימד אותי
- אובייקט config קטן מנצח אותיות עמודה קשיחות מפוזרות ב-handlers
- שיתוף HTML יחיד בין מודאל ו-web app הוא כמעט חינם ב-Apps Script
