คู่มือเริ่มใช้งานคลังอย่างรวดเร็ว

สร้างไลบรารี 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. ตั้งชื่อสคริปต์ว่านำแถวที่ซ้ำกันออก แล้วคลิกเปลี่ยนชื่อ

  8. คลิกทำให้ใช้งานได้ > การทำให้ใช้งานได้ใหม่

  9. ถัดจากเลือกประเภท ให้คลิกเปิดใช้ประเภทการทำให้ใช้งานได้ ไอคอนสำหรับเปิดใช้ประเภทการทำให้ใช้งานได้ > คลัง

  10. ป้อนคำอธิบายของไลบรารี เช่น นำแถวที่ซ้ำกันออก ทุกคนที่มีสิทธิ์เข้าถึงคลังจะดูคำอธิบายนี้ได้

  11. คลิกทำให้ใช้งานได้

  12. คลิกการตั้งค่าโปรเจ็กต์ ไอคอนสำหรับการตั้งค่าโปรเจ็กต์ ทางด้านซ้าย

  13. ในส่วนรหัส ให้คัดลอกรหัสสคริปต์เพื่อใช้ในขั้นตอนถัดไป

เรียกใช้สคริปต์

หากต้องการใช้ไลบรารี คุณต้องมีสิทธิ์การดูสำหรับโครงการ Apps Script เป็นอย่างน้อย และเนื่องจากคุณสร้างไลบรารีไว้ คุณมีสิทธิ์ที่จำเป็นในการใช้ไลบรารีนี้ หากต้องการให้ผู้อื่นใช้ไลบรารีได้ คุณต้องให้สิทธิ์การดูสำหรับโครงการ Apps Script แก่บุคคลนั้น

หากต้องการใช้ไลบรารี ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดสเปรดชีตใน Google ชีตที่มีข้อมูลซึ่งมีแถวซ้ำกัน หากต้องการใช้สเปรดชีตตัวอย่าง ให้ทำสำเนาสเปรดชีตตัวอย่างแถวที่ซ้ำกัน
  2. คลิกส่วนขยาย > Apps Script
  3. ถัดจากคลัง ให้คลิกเพิ่มคลัง
  4. ในส่วนรหัสสคริปต์ ให้วางรหัสสคริปต์จากโครงการสคริปต์ Apps ของไลบรารีที่คุณคัดลอกในส่วนก่อนหน้า
  5. คลิกค้นหา
  6. ในส่วนเวอร์ชัน ให้เลือก 1
  7. คลิกเพิ่ม
  8. ลบโค้ดใดๆ ก็ตามในโปรแกรมแก้ไขสคริปต์ แล้ววางโค้ดด้านล่าง

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. เลือก runLibrary ในรายการฟังก์ชันแบบเลื่อนลง

  10. คลิกเรียกใช้

  11. กลับไปที่สเปรดชีตเพื่อดูข้อมูลที่อัปเดตโดยไม่มีแถวซ้ำกัน

ตรวจสอบโค้ด

หากต้องการตรวจสอบโค้ด Apps Script สำหรับโซลูชันนี้ ให้คลิกดูซอร์สโค้ดด้านล่าง

ดูซอร์สโค้ด

อันดับแรก สคริปต์จะเรียกสเปรดชีตขึ้นมา 1 ครั้งเพื่อดึงข้อมูลทั้งหมด คุณสามารถเลือกอ่านชีตทีละแถวได้ แต่การทำงานของ JavaScript นั้นถือว่าเร็วกว่าการสื่อสารกับบริการอื่นๆ เช่น สเปรดชีตอยู่มาก ยิ่งคุณโทรน้อย ก็ยิ่งทำงานได้เร็วขึ้น นี่เป็นสิ่งสำคัญเพราะการเรียกใช้สคริปต์แต่ละครั้งมีเวลาทำงานสูงสุด 6 นาที

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

ตัวแปร data คืออาร์เรย์ 2 มิติของ JavaScript ที่มีค่าทั้งหมดในชีต newData คืออาร์เรย์ว่างเปล่าที่สคริปต์จะวางแถวที่ซ้ำกันทั้งหมด

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

ลูป for รายการแรกจะวนซ้ำแต่ละแถวในอาร์เรย์ 2 มิติของ data สำหรับแต่ละแถว ลูปที่ 2 จะทดสอบว่ามีแถวอื่นที่มีข้อมูลที่ตรงกันในอาร์เรย์ 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);

การปรับเปลี่ยน

คุณสามารถแก้ไขไลบรารีได้มากเท่าที่ต้องการเพื่อให้ตรงตามความต้องการของคุณ ด้านล่างนี้คือ การแก้ไขที่ไม่บังคับ

นำแถวที่มีข้อมูลตรงกันในบางคอลัมน์ออก

คุณอาจต้องการลบแถวที่มีข้อมูลที่ตรงกันเพียง 1 หรือ 2 คอลัมน์แทนการลบแถวที่ตรงกันทั้งหมด โดยคุณเปลี่ยนข้อความกำหนดเงื่อนไขได้

ในโค้ดตัวอย่าง ให้อัปเดตบรรทัดต่อไปนี้

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

แทนที่บรรทัดด้วยโค้ดต่อไปนี้:

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

คำสั่งแบบมีเงื่อนไขข้างต้นจะค้นหารายการที่ซ้ำกันทุกครั้งที่แถว 2 แถวมีข้อมูลเดียวกันในคอลัมน์แรกและคอลัมน์ที่ 2 ของชีต

ผู้ร่วมให้ข้อมูล

ตัวอย่างนี้สร้างขึ้นโดย Romain Vialard ผู้เชี่ยวชาญจาก Google Developer ติดตาม Romain บน Twitter @romain_vialard

ตัวอย่างนี้ดูแลโดย Google ด้วยความช่วยเหลือจากผู้เชี่ยวชาญด้านนักพัฒนาซอฟต์แวร์ของ Google

ขั้นตอนถัดไป