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.