Google 문서에서 변수로 현재 날짜?


12

문서를 열 때마다 자동으로 업데이트되는 현재 날짜의 변수를 Google 문서 도구에 추가 (삽입) 할 수 있습니까?

몇 가지 기준 :

  • 날짜 위치는 가변적이어야합니다. 즉, 날짜를 페이지 / 단락의 다른 위치에 삽입 할 수 있습니다.

  • 문서는 여전히 공유 가능해야합니다. 즉, 내 문서를 여는 사람들도 현재 날짜와 함께 표시됩니다


현재 날짜를 계산하는 데 어떤 시간대를 사용해야합니까?
Rubén

다목적 성을 갖기 위해 설정에서 사용자가 직접 정의 할 수 있습니까? 아니면 어떻게 든 사용자의 Google 문서 도구 설정에서 자동으로 가져올 수 있습니까?
orschiro

1
방금 코딩 시도를 추가했습니다. 시간대와 관련하여 GMT-5를 사용했지만 원하는 시간대로 쉽게 변경할 수 있습니다. 완벽한 솔루션이 아닙니다.
Rubén

답변:


9

짧은 대답

현재 변수는 Google 문서 및 Google 문서를 확장하는 플랫폼 인 Google Apps 스크립트의 기본 제공 기능이 아니며 변수를 처리하는 클래스 또는 메소드를 포함하지 않습니다.

대안

대안 1

한 가지 대안은 텍스트 패턴을 사용하는 것이지만 업데이트하려는 날짜 만 일치하는지 확인해야합니다.

대안 2

또 다른 대안은 NamedRange 클래스를 사용하는 것이지만

  1. 범위를 이동하면 이름이 없어 집니다 1 .
  2. 명명 된 범위의 텍스트를 여러 요소로 바꾸는 것은 처음에만 작동합니다 2 .

암호:

Google 문서에 바인딩 된 스크립트에 사용되는 다음 코드 에는 두 가지 주요 기능이 있습니다.

  1. 오늘 날짜 삽입
  2. 오늘 날짜 업데이트

디버깅 목적으로 사용 중

  1. 날짜가 아닌 날짜와 시간입니다.
  2. 사용자 정의 메뉴는 주요 기능을 트리거합니다.

"알려진 문제": 업데이트 기능이 전체 단락을 대체합니다.

코드를 테스트하려면 복사 한 다음 Google 문서로 이동하여 새 문서를 작성하고 도구> 스크립트 편집기를 클릭 한 후 빈 프로젝트를 선택하고 코드를 붙여넣고 코드를 붙여넣고 프로젝트를 저장 한 후 이름을 지정하고 앱을 승인하기 위해 정시에 실행하십시오. , 문서를 닫고 다시 엽니 다. "유틸리티"라는 새로운 메뉴가 표시됩니다. 거기에서 주요 기능을 호출 할 수 있습니다.

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


아래에는 "솔루션"을 찾기 위해 영감을 얻거나 "올바른 방향"을 가리킬 수있는 다양한 종류 (질문, 사양 등)가 있습니다.


각주


그것이 불가능하다는 것을 의미합니까?
Jacob Jan Tuinstra

@JacobJanTuinstra : IMHO, 예, 불가능합니다. 가능한 해결책은 해결 방법을 찾는 것이지만 더 많은 맥락이 필요합니다. 나는 그 정보를 요구하는 것은 논평에서 이루어져야한다고 생각하지만, 아직 아무데도 언급 할 수 없다 :)
Rubén

1
@orschiro 그것이 당신을 위해 일했다는 것을 알게되어 기쁩니다. Chrome 확장 프로그램으로 리팩토링하지 않고 Google 문서 부가 기능에 포함될 수 있다고 생각합니다.
Rubén

1
@ChristopherFrancisco : 코드는 바운드 스크립트에서 사용하기위한 것이지만 앱에서 사용하도록 조정할 수 있지만 Stack Overflow에 더 적합 할 수도 있다는 또 다른 질문입니다 .
Rubén

1
@ChristopherFrancisco 방금 Google 문서 편집기 파일의 스크립트 범위에 대한 공식 가이드 링크를 추가했습니다.
Rubén
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.