מדריך למתחילים בנושא הספרייה

איך יוצרים ספריית Apps Script שאפשר להשתמש בה כדי להסיר שורות כפולות בנתונים של גיליון אלקטרוני.

מטרות

  • מגדירים את הסקריפט.
  • מריצים את הסקריפט.

דרישות מוקדמות

כדי להשתמש בדוגמה הזו, צריך את הדרישות המוקדמות הבאות:

  • חשבון Google (יכול להיות שחשבונות Google Workspace ידרשו אישור אדמין).
  • דפדפן אינטרנט עם גישה לאינטרנט.

הגדרת הסקריפט

כדי ליצור את הספרייה:

  1. נכנסים לחשבון Google.
  2. כדי לפתוח את עורך הסקריפטים, עוברים לכתובת script.google.com.
  3. בפינה הימנית העליונה, לוחצים על פרויקט חדש.
  4. מוחקים את כל הקוד בכלי לעריכת סקריפטים ומדביקים את הקוד שבהמשך.

    sheets/removingDuplicates/removingDuplicates.gs
    /**
     * Removes duplicate rows from the current sheet.
     */
    function removeDuplicates() {
      const sheet = SpreadsheetApp.getActiveSheet();
      const data = sheet.getDataRange().getValues();
      const uniqueData = {};
      for (let row of data) {
        const key = row.join();
        uniqueData[key] = uniqueData[key] || row;
      }
      sheet.clearContents();
      const newData = Object.values(uniqueData);
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
  5. לוחצים על סמל השמירה סמל השמירה.

  6. בפינה הימנית העליונה, לוחצים על Untitled project.

  7. נותנים שם לסקריפט הסרת שורות כפולות ולוחצים על שינוי שם.

  8. לוחצים על פריסה > פריסה חדשה.

  9. לצד Select type (בחירת סוג), לוחצים על Enable deployment types (הפעלת סוגי פריסה) הסמל להפעלת סוגי פריסה > Library (ספרייה).

  10. מזינים תיאור של הספרייה, למשל הסרת שורות כפולות. כל המשתמשים שיש להם גישה לספרייה יכולים לראות את התיאור הזה.

  11. לוחצים על פריסת.

  12. בצד ימין, לוחצים על הגדרות הפרויקט הסמל של הגדרות הפרויקט.

  13. בקטע IDs, מעתיקים את מזהה הסקריפט לשימוש בשלב מאוחר יותר.

מריצים את הסקריפט

כדי להשתמש בספרייה, צריכות להיות לכם לפחות הרשאות צפייה בפרויקט של Apps Script שלה. מאחר שיצרתם את הספרייה, יש לכם את ההרשאות הנדרשות לשימוש בה. אם רוצים לאפשר לאנשים אחרים להשתמש בספרייה, צריך לתת להם הרשאת צפייה בפרויקט ב-Apps Script.

כדי להשתמש בספרייה, מבצעים את השלבים הבאים:

  1. פותחים גיליון אלקטרוני ב-Google Sheets שיש בו נתונים עם שורות כפולות. כדי להשתמש בגיליון אלקטרוני לדוגמה, יוצרים עותק של הגיליון האלקטרוני Sample duplicate rows.
  2. לוחצים על תוספים > Apps Script.
  3. לצד ספריות, לוחצים על 'הוספת ספרייה' .
  4. בקטע Script ID, מדביקים את מזהה הסקריפט מפרויקט ה-Apps Script של הספרייה שהועתק בקטע הקודם.
  5. לוחצים על חיפוש.
  6. בקטע Version, בוחרים באפשרות 1.
  7. לוחצים על הוספה.
  8. מוחקים את כל הקוד בכלי לעריכת סקריפטים ומדביקים את הקוד שבהמשך.

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. בתפריט הנפתח של הפונקציה, בוחרים באפשרות runLibrary.

  10. לוחצים על Run.

  11. חוזרים לגיליון האלקטרוני כדי לראות את הנתונים המעודכנים ללא שורות כפולות.

בדיקת הקוד

כדי לבדוק את הקוד של Apps Script לפתרון הזה, לוחצים על הצגת קוד המקור למטה:

הצגת קוד המקור

קודם כול, הסקריפט מבצע קריאה אחת לגיליון האלקטרוני כדי לאחזר את כל הנתונים. אפשר לבחור לקרוא את הגיליון שורה אחרי שורה, אבל פעולות JavaScript מהירות בהרבה מאשר תקשורת עם שירותים אחרים כמו Spreadsheet. ככל שתבצעו פחות קריאות, התהליך יתבצע מהר יותר. זה חשוב כי לכל הפעלה של סקריפט יש זמן ריצה מקסימלי של 6 דקות.

sheets/removingDuplicates/removingDuplicates.gs
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();

המשתנה data הוא מערך דו-מימדי של JavaScript שמכיל את כל הערכים בגיליון. newData הוא מערך ריק שבו הסקריפט מכניס את כל השורות שאין בהן כפילויות.

sheets/removingDuplicates/removingDuplicates.gs
const newData = Object.values(uniqueData);

הלולאה הראשונה for מבצעת חזרה על כל שורה במערך הדו-מימדי data. בכל שורה, הלולאה השנייה בודקת אם כבר קיימת שורה אחרת עם נתונים תואמים במערך newData. אם השורה לא כפולה, היא מועברת למערך newData.

sheets/removingDuplicates/removingDuplicates.gs
uniqueData[key] = uniqueData[key] || row;

בסיום, הסקריפט מחק את התוכן הקיים בגיליון ומוסיף את התוכן של מערך newData.

sheets/removingDuplicates/removingDuplicates.gs
sheet.clearContents();
const newData = Object.values(uniqueData);
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);

שינויים

אתם יכולים לערוך את הספרייה כרצונכם כדי להתאים אותה לצרכים שלכם. בהמשך מופיע שינוי אופציונלי.

הסרת שורות עם נתונים תואמים בחלק מהעמודות

במקום להסיר שורות שתואמות לגמרי, כדאי להסיר שורות עם נתונים שתואמים רק בעמודה אחת או שתיים. כדי לעשות זאת, אפשר לשנות את התנאי.

בקוד לדוגמה, מעדכנים את השורה הבאה:

    if(row.join() == newData[j].join()){
      duplicate = true;
    }

מחליפים את השורה בקוד הבא:

    if(row[0] == newData[j][0] && row[1] == newData[j][1]){
      duplicate = true;
    }

התנאי שלמעלה מוצא כפילויות בכל פעם ששתי שורות מכילות את אותם נתונים בעמודות הראשונה והשנייה של הגיליון.

תורמים

הדוגמה הזו נוצרה על ידי רומן ויאלארד (Romain Vialard), מומחה פיתוח של Google. אפשר לעקוב אחרי רומן ב-Twitter‏ @romain_vialard.

Google שומרת על הדוגמה הזו בעזרת מומחי הפיתוח של Google.

השלבים הבאים