วันที่ปัจจุบันเป็นตัวแปรใน Google เอกสารหรือไม่


12

เป็นไปได้ไหมที่จะเพิ่ม (แทรก) ตัวแปรสำหรับวันที่ปัจจุบันลงใน Google เอกสารที่จะอัปเดตโดยอัตโนมัติทุกครั้งที่ฉันเปิดเอกสาร

เกณฑ์บางอย่าง:

  • ตำแหน่งของวันที่ควรเป็นตัวแปรนั่นคืออนุญาตให้ฉันใส่วันที่ในตำแหน่งที่แตกต่างกันของหน้า / ย่อหน้า

  • เอกสารควรยังคงแชร์ได้เช่นคนที่เปิดเอกสารของฉันจะแสดงพร้อมวันที่ปัจจุบัน


เขตเวลาใดที่ควรใช้ในการคำนวณวันที่ปัจจุบัน
Rubén

หากต้องการใช้งานได้หลากหลายผู้ใช้อาจกำหนดเองในการตั้งค่า หรือสามารถดึงข้อมูลจากการตั้งค่า Google เอกสารของผู้ใช้โดยอัตโนมัติได้หรือไม่
orschiro

1
เพิ่งเพิ่มความพยายามในการเขียนโค้ดของฉัน เกี่ยวกับเขตเวลาฉันใช้ GMT-5 แต่สามารถเปลี่ยนเป็นโซนที่คุณต้องการได้อย่างง่ายดาย มันไม่ใช่ทางออกที่สมบูรณ์
Rubén

คำตอบ:


9

คำตอบสั้น ๆ

ในขณะนี้ตัวแปรไม่ใช่คุณลักษณะในตัวของ Google Docs และ Google Apps Script ซึ่งเป็นแพลตฟอร์มสำหรับขยาย Google Docs ไม่รวมคลาสหรือวิธีการจัดการ

ทางเลือก

ทางเลือก 1

ทางเลือกหนึ่งคือใช้รูปแบบข้อความ แต่คุณควรตรวจสอบให้แน่ใจว่าจะตรงกับวันที่คุณต้องการอัปเดตเท่านั้น

ทางเลือก 2

อีกทางเลือกหนึ่งคือใช้คลาส NamedRange แต่จำไว้ว่า

  1. ย้ายช่วงจะทำให้สูญเสียว่ามันชื่อ1
  2. แทนที่ข้อความในช่วงที่มีชื่อที่มีองค์ประกอบหลายทำงานเฉพาะครั้งแรก2

รหัส:

รหัสต่อไปนี้มีวัตถุประสงค์เพื่อใช้ในสคริปต์ที่ผูกไว้กับ Google เอกสารมีฟังก์ชันหลักสองประการ:

  1. ใส่วันที่วันนี้
  2. อัปเดตวันที่วันนี้

เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องกำลังถูกนำมาใช้

  1. วันที่และเวลาแทนวันที่เท่านั้น
  2. เมนูที่กำหนดเองเพื่อเรียกใช้ฟังก์ชั่นหลัก

"ปัญหาที่ทราบ": ฟังก์ชั่นอัพเดทแทนที่ทั้งย่อหน้า

ในการทดสอบรหัสให้คัดลอกจากนั้นไปที่ Google เอกสารสร้างเอกสารใหม่คลิกที่เครื่องมือ> ตัวแก้ไขสคริปต์เลือกโครงการว่างวางโค้ดบันทึกโครงการกำหนดชื่อเรียกใช้ตรงเวลาเพื่ออนุญาตแอป ปิดเอกสารของคุณและเปิดอีกครั้ง เมนูใหม่ที่ชื่อว่า "Utilities" จะปรากฏขึ้น จากตรงนั้นคุณสามารถเรียกใช้ฟังก์ชั่นหลัก

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());
}


ด้านล่างมีรายการบางอย่างที่แตกต่างกัน (คำถาม, ข้อกำหนด, ฯลฯ ) ที่สามารถรับแรงบันดาลใจหรือชี้ไปที่ "ทิศทางที่ถูกต้อง" เพื่อหา "วิธีแก้ปัญหา"


เชิงอรรถ


หมายความว่าเป็นไปไม่ได้ใช่ไหม
จาค็อบ ม.ค. Tuinstra

@JacobJanTuinstra: IMHO ใช่มันเป็นไปไม่ได้ สิ่งที่อาจเป็นไปได้คือการหาวิธีแก้ไข แต่จำเป็นต้องมีบริบทเพิ่มเติม ผมคิดว่าการขอข้อมูลที่ควรจะทำในการแสดงความคิดเห็น แต่ฉันไม่สามารถแสดงความคิดเห็นได้ทุกที่เลย :)
Rubén

1
@orschiro ฉันดีใจที่รู้ว่าเหมาะกับคุณ ฉันคิดว่าแทนที่จะได้รับการปรับแต่งในส่วนขยายของ Chrome ฉันสามารถเปลี่ยนเป็นส่วนเสริมของ Google เอกสารได้
Rubén

1
@ChristopherFrancisco: รหัสนี้มีจุดประสงค์ที่จะใช้ในสคริปต์ จำกัด แต่มันอาจจะนำไปปรับใช้จากแอปของคุณ แต่ที่เป็นคำถามที่แตกต่างกันว่ามันน่าจะมีความเหมาะสมมากขึ้นสำหรับกองมากเกิน
Rubén

1
@ChristopherFrancisco ฉันเพิ่งเพิ่มลิงค์ไปยังคู่มืออย่างเป็นทางการเกี่ยวกับขอบเขตสคริปต์ในไฟล์แก้ไขของ Google เอกสาร
Rubén
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.