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