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

ליצור ספריית 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. בפינה הימנית העליונה, לוחצים על פרויקט ללא שם.

  7. נותנים לסקריפט את השם Remove duplicate rows (הסרת שורות כפולות) ולוחצים על Rename (שינוי שם).

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

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

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

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

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

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

הפעלת הסקריפט

כדי להשתמש בספרייה, צריכות להיות לכם לפחות הרשאות צפייה בפרויקט 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 לפיתוח.

השלבים הבאים