문서에 텍스트 병합

Google Docs API의 한 가지 유용한 응용 분야는 여러 개의 데이터 소스를 문서로 만들 수 있습니다

이 페이지에서는 외부 소스에서 데이터를 가져와 삽입하는 방법을 설명합니다. 추가할 수 있습니다.

템플릿은 지정된 자리표시자와 함께 템플릿에서 생성된 모든 문서에 동일한 고정 텍스트를 포함하는 특수한 유형의 문서입니다. 다른 동적 텍스트를 배치할 수 있는 위치입니다. 예를 들어, 계약 템플릿에는 수신자의 이름, 주소 및 확인할 수 있습니다 그러면 앱에서 고객별 데이터를 템플릿에 병합할 수 있습니다. 문서를 만들 수 있습니다

이 접근 방식이 유용한 이유는 다음과 같습니다.

  • 디자이너는 API를 사용하여 문서 디자인을 쉽게 조정할 수 있습니다. 바로 Google Docs 편집기입니다. 이 방법은 매개변수를 조정하는 것보다 훨씬 쉽습니다 렌더링된 레이아웃을 설정할 수 있습니다.

  • 프레젠테이션에서 콘텐츠를 분리하는 것은 잘 알려진 디자인 여러 이점이 있습니다

병합의 개념 다이어그램

기본 레시피

다음은 Docs API를 사용하여 데이터를 문서에 병합하는 방법의 예입니다.

  1. 다음을 사용하여 문서 만들기 디자인 및 형식에 도움이 되는 자리표시자 콘텐츠를 사용할 수 있습니다. 바꾸려는 텍스트 서식은 유지됩니다.

  2. 삽입할 각 요소에 대해 자리표시자 콘텐츠를 태그 사이에 있어야 합니다. 일반적으로 발생할 가능성이 낮은 문자열을 사용해야 합니다. 예를 들어 {{account-holder-name}}는 좋은 태그일 수 있습니다.

  3. 코드에서 Google Drive API를 사용하여 문서의 사본을 만듭니다.

  4. 코드에서 Docs API의 batchUpdate() 메서드를 다음과 함께 사용합니다. 해당 문서 이름에 ReplaceAllTextRequest

문서 ID는 문서를 참조하며 URL에서 파생될 수 있습니다.

https://docs.google.com/document/d/documentId/edit

다음 예는 실제 값을 사용하여 완성된 문서를 생성합니다.

이 병합을 수행하려면 아래 코드를 사용하면 됩니다.

자바

String customerName = "Alice";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String date = formatter.format(LocalDate.now());

List<Request> requests = new ArrayList<>();
// One option for replacing all text is to specify all tab IDs.
requests.add(new Request()
        .setReplaceAllText(new ReplaceAllTextRequest()
                .setContainsText(new SubstringMatchCriteria()
                        .setText("{{customer-name}}")
                        .setMatchCase(true))
                .setReplaceText(customerName)
                .setTabsCriteria(new TabsCriteria()
                        .addTabIds(TAB_ID_1)
                        .addTabIds(TAB_ID_2)
                        .addTabIds(TAB_ID_3))));
// Another option is to omit TabsCriteria if you are replacing across all tabs.
requests.add(new Request()
        .setReplaceAllText(new ReplaceAllTextRequest()
                .setContainsText(new SubstringMatchCriteria()
                        .setText("{{date}}")
                        .setMatchCase(true))
                .setReplaceText(date)));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(documentId, body.setRequests(requests)).execute();

Node.js

  let customerName = 'Alice';
  let date = yyyymmdd()
  let requests = [
    // One option for replacing all text is to specify all tab IDs.
    {
      replaceAllText: {
        containsText: {
          text: '{{customer-name}}',
          matchCase: true,
        },
        replaceText: customerName,
        tabsCriteria: {
          tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3],
        },
      },
    },
    // Another option is to omit TabsCriteria if you are replacing across all tabs.
    {
      replaceAllText: {
        containsText: {
          text: '{{date}}',
          matchCase: true,
        },
        replaceText: date,
      },
    },
  ];

  google.options({auth: auth});
  google
      .discoverAPI(
          'https://docs.googleapis.com/$discovery/rest?version=v1&key={YOUR_API_KEY}')
      .then(function(docs) {
        docs.documents.batchUpdate(
            {
              documentId: '1yBx6HSnu_gbV2sk1nChJOFo_g3AizBhr-PpkyKAwcTg',
              resource: {
                requests,
              },
            },
            (err, {data}) => {
              if (err) return console.log('The API returned an error: ' + err);
              console.log(data);
            });
      });

Python

customer_name = 'Alice'
date = datetime.datetime.now().strftime("%y/%m/%d")

requests = [
        # One option for replacing all text is to specify all tab IDs.
        {
        'replaceAllText': {
            'containsText': {
                'text': '{{customer-name}}',
                'matchCase':  'true'
            },
            'replaceText': customer_name,
            'tabsCriteria': {
                'tabIds': [TAB_ID_1, TAB_ID_2, TAB_ID_3],
            },
        }},
        # Another option is to omit TabsCriteria if you are replacing across all tabs.
        {
        'replaceAllText': {
            'containsText': {
                'text': '{{date}}',
                'matchCase':  'true'
            },
            'replaceText': str(date),
        }
    }
]

result = service.documents().batchUpdate(
    documentId=document_id, body={'requests': requests}).execute()

템플릿 관리

애플리케이션이 정의하고 소유하는 템플릿 문서의 경우 다음을 만듭니다. 템플릿을 만듭니다. 서비스 계정 Google Workspace 정책이 복잡해지는 것을 피하고 공유를 제한합니다.

템플릿에서 문서 인스턴스를 만들 때는 항상 사용자 인증 정보를 제공합니다 이를 통해 사용자는 사용자별 관련 확장 문제를 방지할 수 있습니다. Drive의 한도를 확인하세요.

서비스 계정을 사용하여 템플릿을 만들려면 다음 단계를 수행합니다. 애플리케이션 사용자 인증 정보:

  1. 다음을 사용하여 문서 만들기 documents.create를 사용하여 문서를 만들 수 있습니다.
  2. 문서 수신자가 다음을 사용하여 읽을 수 있도록 권한을 업데이트합니다. permissions.create Drive API입니다.
  3. 템플릿 작성자가 다음을 사용하여 쓸 수 있도록 권한을 업데이트합니다. permissions.create Drive API입니다.
  4. 필요에 따라 템플릿을 수정합니다.

문서의 인스턴스를 만들려면 다음 단계를 따르세요. 다음 명령어를 실행합니다.

  1. 다음을 사용하여 템플릿 사본을 만듭니다. Drive API의 files.copy
  2. 다음을 사용하여 값 바꾸기 documents.batchUpdate 문서 API에서 확인할 수 있습니다.