Cara mendapatkan daftar nama sheet saat ini secara otomatis disegarkan oleh skrip aplikasi google saat membuat sheet baru atau mengubah nama sheet atau menduplikasi sheet atau menghapus sheet dari google spread sheet

:::::: Saya perlu daftar nama lembar ::::::::::::

  1. Ada banyak lembar
  2. Lembar baru akan ditambahkan oleh pengguna lain
  3. Nama lembar baru akan diubah oleh pengguna lain
  4. beberapa lembar akan dihapus oleh pengguna lain
  5. Saya perlu daftar nama lembar yang ada tidak lewat

:::::::::::::::::::::::::::::::::::::::

Dan daftar nama sheet akan ditampilkan pada sheet kedua ekspresi kode itu adalah sheet[1]

Kode di bawah ini berfungsi dengan baik. tapi itu tidak menyegarkan dengan menambahkan lembar atau menghapus lembar

function sheetnames()
{
 return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(function(x) {return x.getName();});
}
1
riore El 9 Juli 2020, 07:03

1 menjawab

Jawaban Terbaik

Saya percaya situasi dan tujuan Anda sebagai berikut.

  • Anda menggunakan fungsi sheetnames() sebagai fungsi kustom di Google Spreadsheet.
  • Anda telah mengonfirmasi bahwa fungsi sheetnames() Anda berfungsi.
  • Anda ingin menyegarkan fungsi kustom saat lembar dihapus, dimasukkan, disalin, dan nama lembar diubah.

Untuk mencapai di atas, saya ingin mengusulkan metode berikut.

Pemakaian:

1. Siapkan naskah.

Dalam hal ini, skrip contoh untuk menyegarkan fungsi kustom sheetnames() di Spreadsheet dijalankan oleh pemicu peristiwa OnChange. Untuk ini, salin dan tempel skrip contoh berikut ke skrip Spreadsheet yang terikat wadah, dan simpan skrip.

function onChange(e) {
  var lock = LockService.getDocumentLock();
  if (lock.tryLock(10000)) {
    try {
      const prop = PropertiesService.getScriptProperties();
      if ((e.changeType === "OTHER" || e.changeType === "REMOVE_GRID" || e.changeType === "INSERT_GRID") && !prop.getProperty("run")) {
        const formula = "=sheetnames";  // <--- Please set the function name of the custom function.
        const ss = e.source;
        const tempFormula = "=sampleFormula";
        ss.createTextFinder("^\\" + formula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula);
        ss.createTextFinder("^\\" + tempFormula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
        prop.setProperty("run", "done");
      } else {
        prop.deleteProperty("run");
      }
    } catch(e) {
      throw new Error(e);
    } finally {
      lock.releaseLock();
    }
  }
}
  • Untuk menghindari duplikat menjalankan skrip, LockService digunakan.
  • Untuk menghindari pengulangan pemicu yang tak terbatas, PropertiesService digunakan.

2. Instal pemicu acara OnChange.

Untuk menjalankan fungsi onChange, harap instal pemicu peristiwa OnChange ke fungsi onChange. Anda dapat melihat metode untuk menginstal ini di dokumen resmi ini .

3. Pengujian

Untuk menguji skrip di atas, setelah Anda menginstal fungsi onChange sebagai pemicu acara OnChange yang dapat diinstal, misalnya, masukkan lembar baru. Dengan ini, Anda dapat mengonfirmasi bahwa fungsi kustom sheetnames() telah diperbarui.

Referensi:

3
Tanaike 9 Juli 2020, 05:20