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

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

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

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

วิธีการนี้มีประโยชน์หลายประการดังนี้

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

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

แผนภาพของการรวม

สูตรง่ายๆ

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

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

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

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

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

รหัสเอกสารเป็นการอ้างอิงเอกสารและสามารถดึงมาจาก URL

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

ตัวอย่าง

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

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

Java

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

        List<Request> requests = new ArrayList<>();
        requests.add(new Request()
                .setReplaceAllText(new ReplaceAllTextRequest()
                        .setContainsText(new SubstringMatchCriteria()
                                .setText("{{customer-name}}")
                                .setMatchCase(true))
                        .setReplaceText(customerName)));
        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 = [
    {
      replaceAllText: {
        containsText: {
          text: '{{customer-name}}',
          matchCase: true,
        },
        replaceText: customerName,
      },
    },
    {
      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 = [
         {
            'replaceAllText': {
                'containsText': {
                    'text': '{{customer-name}}',
                    'matchCase':  'true'
                },
                'replaceText': customer_name,
            }}, {
            '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 ใน Docs API
  2. อัปเดตสิทธิ์เพื่ออนุญาตให้ผู้รับเอกสารอ่านเอกสารได้โดยใช้ permissions.create ใน Drive API
  3. อัปเดตสิทธิ์เพื่ออนุญาตให้ผู้เขียนเทมเพลตเขียนลงในเทมเพลตโดยใช้ permissions.create ใน Drive API
  4. แก้ไขเทมเพลตตามต้องการ

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

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