berfungsi dengan parameter untuk addItem di menu spreadsheet menggunakan skrip aplikasi

Saya perlu di setiap pembukaan spreadsheet, untuk memeriksa lembar yang tersedia di spreadsheet dan membuat daftar tambahan yang Buka lembar Tertentu melalui klik di daftar item

Jumlah lembar akan banyak dan bertambah secara dinamis melalui pengerjaan

Saat ini saya sedang memblokir pembuatan fungsi "dummy" ini dengan mengambil parameter jadi, ketika dipanggil, fungsi tersebut harus membuka lembar berdasarkan indeksnya

function onOpen() {
  var monthPlanShortcuts = SpreadsheetApp.getUi().createMenu("Month Plan Shortcuts");
  var gotoSheet = SpreadsheetApp.getUi().createMenu("Go to sheet");
  // get properties to know who is the editor
  var userProperties = PropertiesService.getUserProperties();
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  if (sheets.length > 1) {
    for (var index = 0; index< sheets.length;index++)
    {
      var currentIndex = userProperties.setProperty("index",index);
      gotoSheet.addItem(sheets[index].getName(),"dummy");
    }
  }
  monthPlanShortcuts
    .addItem('View Current Week Plan', 'gotoCurrentWeek')
    .addItem('Go to Specific Week', 'gotoSpecificWeek')
  .addSeparator()
  .addSubMenu(gotoSheet)
  .addToUi();
}

ada saran??


person Mo SAEED    schedule 07.02.2017    source sumber
comment
Sayangnya, Anda tidak dapat meneruskan nilai parameter dari fungsi di .addItem('Title of Menu Item', 'function name') ke fungsi yang dipanggil. Jadi, tidak ada cara untuk melakukan apa yang Anda inginkan dalam satu langkah dari menu. Anda perlu membuka kotak dialog, atau sidebar dari menu. Atau buka sidebar secara otomatis saat spreadsheet terbuka, dan dengan HTML dan JavaScript Anda dapat membuat sesuatu yang akan mengaitkan nama sheet dengan kode apa pun yang ingin Anda jalankan.   -  person Alan Wells    schedule 07.02.2017
comment
@SandyGood terima kasih tetapi apakah tidak ada solusi seperti, 1- menghasilkan fungsi dengan nama tertentu dan menandai fungsinya untuk mengaktifkan lembar atau 2- mendapatkan indeks daftar dan indeks akan merujuk ke indeks lembar juga atau 3- fungsi unik yang mengambil nama fungsi dan mentransfer ke fungsi dengan parameter   -  person Mo SAEED    schedule 08.02.2017
comment
Saya tidak tahu ada pekerjaan apa pun.   -  person Alan Wells    schedule 09.02.2017


Jawaban (1)


Ada solusi peretasan:

Buat fungsi tingkat atas secara dinamis, lalu rujuk ke fungsi tersebut saat menambahkan item menu.

Contoh:

/**
 * @OnlyCurrentDoc
 */
function onOpen() {
  let menu = SpreadsheetApp.getUi().createMenu("Dynamic entries");
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  for (var sheet of ss.getSheets()) {
    let id = sheet.getSheetId();
    let funName = "dynamicFun" + id;
    menu.addItem(sheet.getName() + "(" + id + ")", funName)
  }
  menu.addToUi();
}

for (var sheet of SpreadsheetApp.getActiveSpreadsheet().getSheets()) {
  let id = sheet.getSheetId();
  let funName = "dynamicFun" + id;
  this[funName] = function() { myRealFun(id); };
}

function myRealFun(id) {
  SpreadsheetApp.getUi().alert("" + id + " was pressed");
}
person Florian Loitsch    schedule 31.12.2020