ผสานข้อความลงในเอกสาร

แอปพลิเคชันที่มีประโยชน์อย่างหนึ่งของ Google เอกสาร API คือการผสานข้อมูลจากแหล่งข้อมูลอย่างน้อย 1 แหล่งลงในเอกสาร

หน้านี้จะอธิบายวิธีนำข้อมูลจากแหล่งที่มาภายนอกและแทรกลงในเอกสารเทมเพลตที่มีอยู่

เทมเพลตเป็นเอกสารประเภทพิเศษที่มีข้อความคงที่เหมือนกันสำหรับเอกสารทั้งหมดที่สร้างจากเทมเพลต รวมถึงตัวยึดตำแหน่งที่กำหนดไว้ซึ่งสามารถวางข้อความแบบไดนามิกอื่นๆ ได้ ตัวอย่างเช่น เทมเพลตสัญญาอาจมีเนื้อหาคงที่ รวมถึงจุดสำหรับชื่อ ที่อยู่ และรายละเอียดอื่นๆ ของผู้รับ จากนั้นแอปจะผสานข้อมูลเฉพาะของลูกค้าลงในเทมเพลตเพื่อสร้างเอกสารที่เสร็จสมบูรณ์

มีเหตุผลหลายประการที่ทำให้แนวทางนี้มีประโยชน์

  • นักออกแบบสามารถปรับแต่งการออกแบบเอกสารได้ง่ายๆ โดยใช้โปรแกรมแก้ไข Google เอกสาร ซึ่งง่ายกว่าการปรับพารามิเตอร์ในแอปเพื่อตั้งค่าเลย์เอาต์ที่แสดงผลมาก

  • การแยกเนื้อหาออกจากงานนำเสนอเป็นหลักการออกแบบที่รู้จักกันดีซึ่งมีประโยชน์มากมาย

แผนภาพแนวคิดของการผสาน

สูตรพื้นฐาน

ตัวอย่างวิธีใช้เอกสาร API เพื่อผสานข้อมูลลงในเอกสาร

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

  2. สำหรับแต่ละองค์ประกอบที่คุณจะแทรก ให้แทนที่เนื้อหาตัวยึดตำแหน่งด้วยแท็ก ตรวจสอบว่าใช้สตริงที่ไม่มีแนวโน้มที่จะเกิดขึ้นตามปกติ ตัวอย่างเช่น อาจเป็นแท็กที่ดี{{account-holder-name}}

  3. ใช้ Google ไดรฟ์ API ในโค้ดเพื่อทำสำเนาเอกสาร

  4. ใช้เมธอดของเอกสาร API batchUpdate() กับชื่อเอกสาร และใส่ ReplaceAllTextRequestในโค้ด

รหัสเอกสารอ้างอิงเอกสารและสามารถได้มาจาก URL

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

ตัวอย่าง

ดูตัวอย่างต่อไปนี้ ซึ่งจะแทนที่ 2 ช่องในทุกแท็บของเทมเพลตด้วยค่าจริงเพื่อสร้างเอกสารที่เสร็จสมบูรณ์

หากต้องการทำการผสานนี้ คุณสามารถใช้โค้ดด้านล่าง

Java

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

List 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(DOCUMENT_ID, 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 ที่ จำกัดการแชร์

เมื่อสร้างอินสแตนซ์ของเอกสารจากเทมเพลต ให้ใช้ข้อมูลเข้าสู่ระบบของผู้ใช้ปลายทางเสมอ วิธีนี้ช่วยให้ผู้ใช้ควบคุมเอกสารที่ได้ได้อย่างเต็มที่ และป้องกันปัญหาการปรับขนาดที่เกี่ยวข้องกับขีดจำกัดต่อผู้ใช้ในไดรฟ์

หากต้องการสร้างเทมเพลตโดยใช้บัญชีบริการ ให้ทำตามขั้นตอนต่อไปนี้ด้วยข้อมูลเข้าสู่ระบบของแอปพลิเคชัน

  1. สร้างเอกสารโดยใช้ documents.create ในเอกสาร API
  2. อัปเดตสิทธิ์เพื่อให้ผู้รับเอกสารอ่านเอกสารได้โดยใช้ permissions.create ในไดรฟ์ API
  3. อัปเดตสิทธิ์เพื่อให้ผู้เขียนเทมเพลตเขียนเอกสารได้โดยใช้ permissions.create ในไดรฟ์ API
  4. แก้ไขเทมเพลตตามต้องการ

หากต้องการสร้างอินสแตนซ์ของเอกสาร ให้ทำตามขั้นตอนต่อไปนี้ด้วยข้อมูลเข้าสู่ระบบของผู้ใช้

  1. สร้างสำเนาเทมเพลตโดยใช้ files.copy ใน ไดรฟ์ API
  2. แทนที่ค่าโดยใช้ documents.batchUpdate ในเอกสาร API