on เปิดบนแผ่นงานเฉพาะใน AppScript

Aug 31 2020

ฉันมีonOpenรหัสการดำเนินการ แต่ต้องการให้ดำเนินการเฉพาะเมื่อเปิดแผ่นงานเฉพาะ (ตัวอย่างเช่นในการเปิดSheet1ฟังก์ชัน onOpen ควรทำงาน) มีใครทราบวิธีการดำเนินการนี้บ้าง

นี่คือสิ่งที่ฉันต้องการบรรลุ:

  1. เมื่อเปิดสเปรดชีตตรวจสอบว่าแผ่นงานที่ใช้งานอยู่คือแผ่นงาน 1 หรือไม่ ในกรณีที่ดำเนินการเงื่อนไขภายในแผ่นงานดังที่แสดงด้านล่าง:
onOpen()
{
    //If the active sheet is "Sheet1" then perform this:
    //Sheet Execution comes here.
}

แต่นี่คือปัญหาของข้อความข้างต้น:

onOpen จะตรวจสอบเมื่อเปิดแผ่นงานเท่านั้น ฉันต้องการตรวจสอบทุกครั้งที่แผ่นงานที่ใช้งานอยู่คือ "Sheet1" ตัวอย่างเช่นในตอนแรกผู้ใช้เปิดสเปรดชีตพวกเขาไปที่ "Sheet1" ตอนนี้เงื่อนไขจะถูกตรวจสอบและแสดงผลลัพธ์ แต่จะเกิดอะไรขึ้นถ้าผู้ใช้เปลี่ยนแท็บเป็น "Sheet2" แล้วกลับมาที่ "Sheet1" ในกรณีonOpen()นั้นจะไม่ดำเนินการ ฉันต้องการตรวจสอบทุกครั้งที่ผู้ใช้เข้ามาหรือเปลี่ยนเป็น "Sheet1"

ตอนนี้เป็นอีกสถานการณ์หนึ่ง:

ใช้onSelectionChange:

onSelectionCHange()
{
    //If the active sheet is "Sheet1" then perform this:
    //Sheet Execution comes here.
}

ตอนนี้จะใช้งานได้ทุกครั้งที่ผู้ใช้เปลี่ยนเป็น "Sheet1" แต่นี่คือปัญหาแม้ว่าผู้ใช้จะเปลี่ยนไปใช้เซลล์อื่นใน "Sheet1" onSelectionChangeซึ่งเป็นสิ่งที่ไม่ต้องการอีกครั้ง สิ่งที่ฉันต้องการเพียงแค่เรียกใช้ฟังก์ชันทุกครั้งที่เปลี่ยนแท็บ / แผ่นงานเป็น "Sheet1" และไม่เพียง แต่เมื่อเปิดสเปรดชีตหรือเซลล์การเลือกใด ๆ มีการเปลี่ยนแปลง

คำตอบ

2 Marios Aug 31 2020 at 17:49

คำอธิบาย:

หากต้องการเรียกใช้บล็อกโค้ดภายในonOpenฟังก์ชันเฉพาะเมื่อคุณเปิดไฟล์สเปรดชีตจากSheet1จากนั้นคุณสามารถสร้างเงื่อนไข if ต่อไปนี้:

function onOpen(e) {
const as = e.source.getActiveSheet().getName();
  if (as == 'Sheet1'){
//code you want to be executed when you open the spreadsheet from Sheet1
}
}

ข้อเสียเปรียบ:

OnOpenฟังก์ชั่นจะถูกดำเนินการเฉพาะเมื่อคุณเปิดสเปรดชีตไฟล์ คุณไม่สามารถสลับไปมาระหว่างแผ่นงานและคาดว่า onOpen จะทำงานได้


วิธีการแก้:

ในการรันโค้ดเมื่อสลับระหว่างแผ่นงานต่างๆคุณสามารถใช้แทนonSelectionChange(e)ได้ ตัวอย่างต่อไปนี้กำหนดค่าของเซลล์ A1 ของSheet1เมื่อคุณเปลี่ยนจากที่แตกต่างกันแผ่นSheet1 :

function onSelectionChange(e) {
  
const as = e.source.getActiveSheet();
  if (as.getName() == 'Sheet1'){ 
    as.getRange('A1').setValue("This is Sheet1");
  }
}

และนี่คือเทมเพลตโค้ดทั่วไปสำหรับรันโค้ดเมื่อเปลี่ยนเป็นSheet1 :

  function onSelectionChange(e) {
      
    const as = e.source.getActiveSheet();
      if (as.getName() == 'Sheet1'){ 
        // put your code here
      }
    }

อ้างอิง:

  • onOpen (จ)
  • onSelectionChange (จ)