Tujuan: Tujuannya adalah agar sheet akan berisi informasi, informasi ini ditempatkan di dalam rentang nama, rentang nama akan dinamis (seluruh kolom diberi rentang nama). Saya membuat popup html yang berisi daftar dropdown. Daftar tarik-turun ini harus berisi daftar informasi dari rentang nama.

Saya tidak dapat memahami bagaimana ini harus dilakukan. Berikut adalah kode di bawah ini:

   function fncOpenMyDialog() {
  var htmlDlg = HtmlService.createHtmlOutputFromFile('HTML_myHtml')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setWidth(200)
      .setHeight(150);
  SpreadsheetApp.getUi()
      .showModalDialog(htmlDlg, 'New File');
};

function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('New')
  .addItem('New Save File Extension','fncOpenMyDialog')
  .addToUi();
}
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <select name="nameYouWant" placeholde="File Type">
  <option value="something">Word</option>
  <option value="anything">MS Excel</option>
  <option value="anything">MS Powerpoint</option>
  <option value="anything">MS Slides</option>
  </select>

<hr/>
<p>Choose a file, which will then be saved into your Google Drive.</p>

<button onmouseup="closeDia()">Close</button>
<button onmouseup="onOpen()">Save</button>

<script>
  window.closeDia = function() {
    google.script.host.close();
  };
  window.saveDia = function() {
  onOpen();
  };
</script>
  </body>
</html>

Seperti yang Anda lihat di file html saya, ekstensi saat ini di-hardcode. Saya mencoba membuat ini dinamis, bagaimana cara mencapainya?

1
Adam 20 Mei 2020, 13:16

1 menjawab

Jawaban Terbaik

Saya percaya tujuan Anda sebagai berikut.

  • Anda ingin memasukkan nilai ke daftar dropdown dengan mengambil dari rentang bernama Spreadsheet.
    • Dalam hal ini, apakah rentang bernama sama dengan utas ini?

Untuk ini, bagaimana dengan jawaban ini?

Poin modifikasi:

  • Dari google.script.host.close(), saya memahami bahwa file HTML HTML_myHtml disertakan dalam proyek Skrip Google Apps. Dengan ini, saya ingin mengusulkan untuk mencapai tujuan Anda menggunakan google.script.run.
  • Jika rentang bernama sama dengan pertanyaan Anda sebelumnya, Anda dapat menggunakannya dengan sedikit memodifikasi.

Ketika poin di atas tercermin ke skrip Anda, itu menjadi sebagai berikut.

Skrip yang dimodifikasi:

Sisi HTML dan JavaScript: HTML_myHtml

Harap ubah HTML_myHtml sebagai berikut.

<!DOCTYPE html>
<html>

<head>
    <base target="_top">
</head>

<body>
    <select id="select" name="nameYouWant" placeholde="File Type"></select>
    <hr />
    <p>Choose a file, which will then be saved into your Google Drive.</p>
    <button onmouseup="closeDia()">Close</button>
    <button onmouseup="onOpen()">Save</button>
    <script>
        google.script.run.withSuccessHandler(v => {
            const obj = document.getElementById("select");
            v.forEach(e => {
                const option = document.createElement("option");
                option.text = e;
                option.value = e;
                obj.appendChild(option);
            });
        }).readNamedRange();

        window.closeDia = function() {
            google.script.host.close();
        };

        window.saveDia = function() {
            onOpen();
        };
    </script>
</body>

</html>

Sisi Skrip Google Apps: Code.gs

Pada HTML di atas, readNamedRange() digunakan. Jadi silahkan masukkan script berikut. Jika Anda memiliki nama fungsi yang sama, harap ubah. Dalam skrip ini, nilai diambil dari rentang bernama listDown, dan dikirim ke sisi HTML menggunakan google.script.run.

function readNamedRange() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var result = activeSheet.getRange("listDown").getValues();
  var end = activeSheet.getLastRow();
  var values = [];
  for (var i = 0; i < end; i++) {
    if (result[i][0] != "") {
      values.push(result[i][0]);
    }
  }
  return values;
}

Catatan:

  • Tentang window.saveDia = function() {onOpen()};, sayangnya, saya tidak mengerti tentang apa yang ingin Anda lakukan.

Referensi:

2
halfer 22 Mei 2020, 10:26