Tanggal saat ini sebagai variabel di Google Documents?

12

Apakah mungkin untuk menambahkan (menyisipkan) variabel untuk tanggal saat ini ke Google Documents yang akan diperbarui secara otomatis setiap kali saya membuka dokumen?

Beberapa kriteria:

  • Posisi tanggal harus variabel, yaitu memungkinkan saya untuk memasukkan tanggal posisi yang berbeda dari halaman / paragraf

  • Dokumen harus tetap dapat dibagikan, yaitu orang yang membuka dokumen saya juga akan ditampilkan dengan tanggal saat ini

orschiro
sumber
Zona waktu mana yang harus digunakan untuk menghitung tanggal saat ini?
Rubén
Untuk membuatnya serbaguna, mungkin ditentukan oleh pengguna sendiri dalam pengaturan? Atau dapatkah itu diambil dari pengaturan Google Documents pengguna secara otomatis?
orschiro
1
Baru saja menambahkan upaya pengkodean saya. Mengenai zona waktu, saya menggunakan GMT-5 tetapi bisa dengan mudah diubah ke yang Anda butuhkan. Itu bukan solusi lengkap.
Rubén

Jawaban:

9

Jawaban singkat

Saat ini, variabel bukan fitur bawaan Google Documents dan Google Apps Script, platform untuk memperluas Google Documents, tidak termasuk kelas atau metode untuk menanganinya.

Alternatif

Alternatif 1

Salah satu alternatif adalah menggunakan pola teks tetapi Anda harus yakin bahwa itu hanya cocok dengan tanggal yang ingin Anda perbarui.

Alternatif 2

Alternatif lain adalah dengan menggunakan kelas NamedRange tetapi ingatlah itu

  1. memindahkan rentang akan membuatnya kehilangan namanya 1 .
  2. mengganti teks dalam rentang bernama dengan beberapa elemen hanya berfungsi saat pertama kali 2 .

Kode:

Kode berikut, dimaksudkan untuk digunakan dalam skrip yang terikat dengan Dokumen Google, memiliki dua fungsi utama:

  1. Masukkan tanggal hari ini
  2. Perbarui tanggal hari ini

Untuk keperluan debugging sedang digunakan

  1. tanggal dan waktu, bukan hanya tanggal.
  2. menu kustom untuk memicu fungsi utama.

"Masalah yang Diketahui": Fungsi pembaruan menggantikan seluruh paragraf.

Untuk menguji kode, salin, lalu buka Google Documents Anda, buat dokumen baru, klik Tools> Editor Skrip, pilih Blank Project, rekatkan kode, simpan proyek, tetapkan nama, jalankan tepat waktu untuk mengotorisasi aplikasi , tutup dokumen Anda dan buka kembali. Menu baru yang disebut "Utilities" akan ditampilkan. Dari sana Anda dapat memanggil fungsi utama.

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Utilities')
      .addItem('Insert Today\'s Date', 'insertTodayAtCursor')
      .addItem('Update Today\'s Date', 'setTodayNamedRange')
      .addToUi();
}

function todayDate(){
  return Utilities.formatDate(new Date(), "GMT-5", "yyyy-MM-dd'T'HH:mm:ss'Z'"); // "yyyy-MM-dd"
}

/**
 * Inserts the today's date at the current cursor location and create a NamedRange.
 */
function insertTodayAtCursor() {
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  var cursor = doc.getCursor();

  if (cursor) {
    // Attempt to insert today's date at the cursor position. If insertion returns null,
    // then the cursor's containing element doesn't allow text insertions.
    var date = todayDate();
    var element = cursor.insertText(date);
    if (element) {
      var rangeBuilder = doc.newRange();
      rangeBuilder.addElement(element);
      return doc.addNamedRange(str, rangeBuilder.build()); 
    } else {
      DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
    }
  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

function setTodayNamedRange(){
  var str = 'testToday';
  var doc = DocumentApp.getActiveDocument();
  // Retrieve the named range
  var namedRanges = doc.getNamedRanges();
  var newRange = doc.newRange();
  var date = todayDate();
  for(var i=0; i<namedRanges.length; i++){

    if(namedRanges[i].getName() == str){

      var rangeElement = namedRanges[i].getRange().getRangeElements();

      for (var j=0; j<rangeElement.length; j++){

        var element = rangeElement[j].getElement().asText().editAsText().setText(date);
        newRange.addElement(element);
      }
    }
  }
  doc.addNamedRange(str, newRange.build());
}


Di bawah ini ada beberapa item dari jenis yang berbeda (pertanyaan, spesifikasi, dll.) Yang dapat berfungsi untuk mendapatkan inspirasi atau menunjuk ke "arah yang benar" untuk menemukan "solusi"


Catatan kaki

Rubén
sumber
Apakah itu berarti tidak mungkin?
Jacob Jan Tuinstra
@ JacobJanTuinstra: IMHO, ya, itu tidak mungkin. Apa yang mungkin adalah menemukan solusi tetapi perlu konteks lebih. Saya pikir meminta informasi itu harus dilakukan dalam komentar, tetapi saya belum bisa berkomentar di mana saja :)
Rubén
1
@orschiro Saya senang mengetahui bahwa itu berhasil untuk Anda. Alih-alih direactored ke ekstensi Chrome, bisa menjadi add-on Google Documents, saya pikir.
Rubén
1
@ChristopherFrancisco: Kode ini dimaksudkan untuk digunakan pada skrip yang dibatasi tetapi dapat diadaptasi untuk digunakan dari aplikasi Anda tetapi itu adalah pertanyaan yang berbeda yang kemungkinan besar lebih sesuai untuk Stack Overflow .
Rubén
1
@ChristopherFrancisco Saya baru saja menambahkan tautan ke panduan resmi tentang batas skrip ke file editor Google Documents.
Rubén