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

สร้างไลบรารี 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 Script ของไลบรารีที่คุณคัดลอกไว้ในส่วนก่อนหน้า
  5. คลิกค้นหา
  6. เลือก 1 ในส่วนเวอร์ชัน
  7. คลิกเพิ่ม
  8. ลบโค้ดทั้งหมดในตัวแก้ไขสคริปต์ แล้ววางโค้ดด้านล่าง

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

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

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

ตรวจสอบโค้ด

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

ดูซอร์สโค้ด

ก่อนอื่น สคริปต์จะเรียกใช้สเปรดชีตเพียงครั้งเดียวเพื่อดึงข้อมูลทั้งหมด คุณเลือกที่จะอ่านชีตทีละแถวได้ แต่การดำเนินการ 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 แรกจะวนซ้ำแต่ละแถวในdata آراย 2 มิติ สําหรับแต่ละแถว ลูปที่ 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 แถวที่มีข้อมูลเหมือนกันในคอลัมน์ที่ 1 และ 2 ของชีต

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

ตัวอย่างนี้สร้างโดย Romain Vialard ซึ่งเป็น Google Developer Expert ติดตาม @romain_vialard บน Twitter

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

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