我有一個 Google 表單,它在點擊提交按鈕后會做兩件事。首先,它將資料轉儲到電子表格中,然后使用表單中的資訊自動填充 Google 檔案模板。
在我自動填充 Google Doc 的腳本中,我獲取了 Google Doc 的 URL。但是我需要將此 URL 寫入 Google Sheet 中 J 列的最后一行。更正:使用 getActiveSheet 函式很好,我忘了這個腳本是從(活動的)Google Sheet 運行的(抱歉!)。
任何人都可以提供幫助嗎?這是獲取 URL 的腳本片段:
function autoFillGoogleDocFromForm(e) {
//e.values is an array of form values
var TimeStamp = e.values[0];
var Technician = e.values[1];
var Vendor = e.values[2];
var xxx = e.values[3];
var yyy = e.values[4];
var SerialNumber = e.values[5];
var AssetTag = e.values[6];
var TicketNumber = e.values[7];
var HostName = e.values[8];
var DocumentLink = e.values[9];
var Return = e.values[10];
var Platform = e.values[11];
var Summary = e.values[12];
var URL = "";
//file is the template file, and you get it by ID
var file = DriveApp.getFileById('aaa');
//Put auto filled Google Doc into the appropriate Vendor Folder
//file.makeCopy will return a Google Drive file object
if (Vendor == "111") {
var folder = DriveApp.getFolderById('bbb')
var copy = file.makeCopy(TicketNumber ' - ' SerialNumber, folder);
}
if (Vendor == "222") {
var folder = DriveApp.getFolderById('ccc')
var copy = file.makeCopy(TicketNumber ' - ' SerialNumber, folder);
}
if (Vendor == "333") {
var folder = DriveApp.getFolderById('ddd')
var copy = file.makeCopy(TicketNumber ' - ' SerialNumber, folder);
}
//Once we've got the new file created, we need to open it as a document by using its ID
var doc = DocumentApp.openById(copy.getId());
//Get the url of the newly created Google Doc
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
//Since everything we need to change is in the body, we need to get that
var body = doc.getBody();
//Then we call all of our replaceText methods
body.replaceText('{{EmailAddress}}', Technician);
body.replaceText('{{TicketNumber}}', TicketNumber);
body.replaceText('{{HostName}}', HostName);
body.replaceText('{{SerialNumber}}', SerialNumber);
body.replaceText('{{AssetTag}}', AssetTag);
body.replaceText('{{Summary}}', Summary);
body.replaceText('{{Vendor}}', Vendor);
body.replaceText('{{URL}}', url);
//Lastly we save and close the document to persist our changes
doc.saveAndClose();
提前致謝!
uj5u.com熱心網友回復:
從您在問題中的以下情況來看,
這也是一個共享的 Google Sheet,所以我不能使用 getActiveSheet 函式,我相信我需要參考 Google Sheet URL。
如果您有權限將值寫入共享的 Google 電子表格,那么下面的修改如何?
從:
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
到:
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
var sheet = SpreadsheetApp.openById("### Spreadsheet ID ###").getSheetByName("### sheet name ###");
sheet.appendRow([url]);
- 在此修改中,請設定 Spredsheet ID 和作業表名稱。這樣, 的值將
url附加到 Google 電子表格中作業表最后一行的下一行。 - 如果您想使用電子表格 URL 而不是電子表格 ID,請修改
openById("### Spreadsheet ID ###")為openByUrl("### Spreadsheet URL ###")。
參考:
- openById(id)
- openByUrl(url)
- appendRow(rowContents)
編輯:
從以下回復來看,
不幸的是,將 URL 插入 J 列的最后一行似乎不起作用。看起來這個腳本畢竟可以使用活動表,我將編輯OP。
在這種情況下,如何進行以下修改?
從:
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
到:
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
// var sheet = SpreadsheetApp.openById("### Spreadsheet ID ###").getSheetByName("### sheet name ###");
var sheet = SpreadsheetApp.getActiveSheet(); // or SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetname")
sheet.getRange("J" (sheet.getLastRow() 1)).setValue(url);
或者
var url = doc.getUrl();
//Script to write this URL into the Shared Google Sheet will go here
// This is from https://stackoverflow.com/a/44563639/7108653
Object.prototype.get1stEmptyRowFromTop = function (columnNumber, offsetRow = 1) {
const range = this.getRange(offsetRow, columnNumber, 2);
const values = range.getDisplayValues();
if (values[0][0] && values[1][0]) {
return range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() 1;
} else if (values[0][0] && !values[1][0]) {
return offsetRow 1;
}
return offsetRow;
};
// var sheet = SpreadsheetApp.openById("### Spreadsheet ID ###").getSheetByName("### sheet name ###");
var sheet = SpreadsheetApp.getActiveSheet(); // or SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetname")
sheet.getRange("J" sheet.get1stEmptyRowFromTop(10)).setValue(url);
uj5u.com熱心網友回復:
建議:
如果您需要將URL值寫入共享 Google 電子表格檔案中 J 列的最后一行,您可以嘗試以下示例:
function sample() {
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/SHEET_ID_IS_HERE/edit#gid=0');
var sheet = ss.getSheets()[0]; // access first sheet
var activeSheet = ss.setActiveSheet(sheet);
//Sample setValue() action to the shared sheet file
activeSheet.getRange("A1").setValue("URL");
}
注意:您需要對正在訪問的共享 Google 表格檔案擁有編輯者權限
參考:
- openByUrl(url)
- 獲取表()
- setActiveSheet(作業表)
uj5u.com熱心網友回復:
這是最終為我作業的代碼。
//Get the url of the newly created Google Doc
var url = doc.getUrl();
// var sheet = SpreadsheetApp.openById("### Spreadsheet ID ###").getSheetByName("### sheet name ###");
var sheet = SpreadsheetApp.getActiveSheet(); // or SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetname")
sheet.getRange("J" (sheet.getLastRow())).setValue(url);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326438.html
