今天要來教大家兩個比較應用面的實作:文檔共享和管理 & 自動生成報告
addEditor
addViewer
:自動將 Document 分享給指定的用戶或群組,並設置權限
function shareDocument() {
var doc = DocumentApp.getActiveDocument();
var emailAddress = 'user@example.com';
doc.addEditor(emailAddress); // 增加編輯權限
// 或者
// doc.addViewer(emailAddress); // 增加查看權限
}
function setDocumentProperties() {
var doc = DocumentApp.getActiveDocument();
doc.setName('我是新的文件標題');
}
有時候我們需要把在 excel/google sheet 做好的表格嵌入至報告中,但表格內的資訊一直在變動,兩邊的資訊就變得不同步
今天來學如何自動生成這個定期報告,並隨時更新兩邊的資訊吧!
function generateReport() {
// var doc = DocumentApp.create('Weekly Report');
const doc = DocumentApp.openById("{你的 Google Doc ID}");
var body = doc.getBody();
body.appendParagraph('Weekly Report').setHeading(DocumentApp.ParagraphHeading.HEADING1);
// 從 Google Sheets 中提取數據並插入到文檔中
var sheet = SpreadsheetApp.openById('{你的 Google sheet ID}').getSheetByName('{你的 Google sheet tab 名稱}');
var data = sheet.getDataRange().getValues();
var table = body.appendTable();
for (var i = 0; i < data.length; i++) {
var row = table.appendTableRow();
for (var j = 0; j < data[i].length; j++) {
row.appendTableCell(data[i][j]);
}
}
return 0;
}
執行 generateReport
後,它就自動幫我們生成一個名為 Weekly Report 的 Google doc 啦~
成果就會長得這樣子!
如果想再繼續追蹤往下加呢?
我們可以先去看看 google sheet 是否有新的資料產生
透過兩邊的 row 數量是否相同,如果不同就去 update 新的 row 上來 Doc Table
當然你也可以去更新整個 table
下面是只有針對新的資料行去做更新~
function updateTable()
{
const doc = DocumentApp.openById("{你的 Google Doc ID}");
var body = doc.getBody();
// Gets the first table in the tab
const table = body.getTables()[0];
// open the budget spreadsheet
var sheet = SpreadsheetApp.openById('{你的 Google sheet ID}').getSheetByName('Sheet1');
// Make sure if the row num of two tables (spreadsheet and doc) are matched. If not, go to UPDATE.
var sheetlastRow = sheet.getLastRow();
if (sheetlastRow > table.getNumRows())
{
var data = sheet.getDataRange().getValues();
for (var i = table.getNumRows(); i < sheetlastRow; i++) {
var row = table.appendTableRow();
for (var j = 0; j < data[i].length; j++) {
row.appendTableCell(data[i][j]);
}
}
}
return 0;
}
如果想要讓這一切都自己發生呢,不用手動去 update 呢?
趕緊回頭看看 [Day 4] GAS - 設定以事件為準的觸發條件OnEdit/OnOpen/onSelectionChange
我們就可以用到 OnEdit 這個觸發條件去幫我們去自動化流程啦~
這次我們可以偷懶一點用 GUI 來幫我設立觸發條件:
這樣我們就讓試算表的資料跟 google doc 完全連動啦~~
恭喜你完成學習 GAS 20 天啦!還有 10 天我們繼續一起努力!!!