การใช้งานที่มีประโยชน์อย่างหนึ่งของ Google Docs API ก็คือการผสานข้อมูลจากแหล่งข้อมูลตั้งแต่ 1 แหล่งขึ้นไปลงในเอกสาร
หน้านี้จะสรุปวิธีนำข้อมูลจากแหล่งภายนอกมาแทรกลงในเอกสารเทมเพลตที่มีอยู่
เทมเพลตคือเอกสารประเภทพิเศษที่มีข้อความคงที่เหมือนกันสำหรับเอกสารทั้งหมดที่สร้างจากเทมเพลต พร้อมด้วยตัวยึดตำแหน่งที่กำหนดซึ่งสามารถวางข้อความแบบไดนามิกอื่นๆ ได้ เช่น เทมเพลตสัญญาอาจมีเนื้อหาคงที่ พร้อมกับตำแหน่งผู้รับชื่อ ที่อยู่ และรายละเอียดอื่นๆ จากนั้นแอปจะผสานข้อมูลเฉพาะของลูกค้าเข้ากับเทมเพลตเพื่อสร้างเอกสารที่เสร็จสมบูรณ์ได้
วิธีการนี้มีประโยชน์หลายประการดังนี้
นักออกแบบจะปรับแต่งการออกแบบเอกสารได้อย่างง่ายดายโดยใช้เครื่องมือแก้ไข Google เอกสาร วิธีนี้ง่ายกว่าการปรับแต่งพารามิเตอร์ในแอป เพื่อกำหนดการออกแบบที่แสดงผล
การแยกเนื้อหาออกจากการนำเสนอเป็นวิธีการออกแบบ ซึ่งเป็นที่รู้จักกันดีและมีประโยชน์มากมาย
สูตรง่ายๆ
ตัวอย่างวิธีใช้ API ของเอกสารเพื่อผสานข้อมูลลงในเอกสารมีดังนี้
สร้างเอกสารโดยใช้เนื้อหาตัวยึดตำแหน่งเพื่อช่วยในการออกแบบและรูปแบบ การจัดรูปแบบข้อความที่คุณต้องการแทนที่จะยังคงอยู่
สำหรับองค์ประกอบแต่ละรายการที่คุณจะแทรก ให้แทนที่เนื้อหาตัวยึดตำแหน่งด้วยแท็ก ตรวจสอบว่าได้ใช้สตริงที่ไม่น่าจะเกิดขึ้นตามปกติ ตัวอย่างเช่น
{{account-holder-name}}
อาจเป็นแท็กที่ดีใช้ API ของ Google ไดรฟ์เพื่อทำสำเนาเอกสารในโค้ดของคุณ
ในโค้ด ให้ใช้เมธอด
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 ที่ จำกัดการแชร์
เมื่อสร้างอินสแตนซ์ของเอกสารจากเทมเพลต ให้ใช้ข้อมูลเข้าสู่ระบบของผู้ใช้ปลายทางเสมอ วิธีนี้ช่วยให้ผู้ใช้ควบคุมเอกสารผลลัพธ์ได้อย่างเต็มที่และป้องกันการปรับขนาดปัญหาเกี่ยวกับขีดจำกัดต่อผู้ใช้ในไดรฟ์
หากต้องการสร้างเทมเพลตโดยใช้บัญชีบริการ ให้ทำตามขั้นตอนต่อไปนี้ด้วยข้อมูลเข้าสู่ระบบของแอปพลิเคชัน
- สร้างเอกสารโดยใช้ documents.create ใน Docs API
- อัปเดตสิทธิ์เพื่ออนุญาตให้ผู้รับเอกสารอ่านเอกสารได้โดยใช้ permissions.create ใน Drive API
- อัปเดตสิทธิ์เพื่ออนุญาตให้ผู้เขียนเทมเพลตเขียนลงในเทมเพลตโดยใช้ permissions.create ใน Drive API
- แก้ไขเทมเพลตตามต้องการ
หากต้องการสร้างอินสแตนซ์ของเอกสาร ให้ทำตามขั้นตอนต่อไปนี้ด้วยข้อมูลเข้าสู่ระบบของผู้ใช้
- สร้างสำเนาเทมเพลตโดยใช้ files.copy ใน API ของไดรฟ์
- โปรดแทนที่ค่าโดยใช้ documents.batchUpdate ใน Docs API