所以,我得到了一个谷歌应用程序脚本,它放在我的电子表格"AllScripts"上。我不是那种想要它的人,但它必须写在一个单独的电子表格中。
在电子表格"wb1"应用程序脚本中,我将从"AllScripts"导入代码作为库,这样我就可以在"wb1"上调用其方法。仍然在"wb1"上,有onOpen
方法,它创建一个菜单并使用"AllScripts"中的方法添加一个项。一切都很好,直到这里。
以下电子表格中提供了最低限度的可重复代码
这些分别是"wb1"电子表格和"AllScripts"电子表格:https://docs.google.com/spreadsheets/d/1uQz8q1AE7vs9eJCajnIAPmQZRQgBoZv1mF9dcH9D_l8/edit?usp=sharinghttps://docs.google.com/spreadsheets/d/1YaO18yRagzG4wA46AGnzn94CR6Vy6ENZcsbLZKN6OgM/edit?usp=sharing
请注意,一开始你看不到菜单,也无法运行任何代码,所以在"wb1"上转到Extensions>应用程序编写脚本,然后运行onOpen
。它会询问你的权限,我不知道为什么,它会打开一个带有安全警告的窗口。
无论如何,当您从菜单打开模态时Scripts>测试并编写所需内容,在浏览器上打开控制台,您应该会看到以下内容:[![错误][1]][1]
我不知道如何阅读,但很明显,在"wb1"上打开的模态代码无法打开"AllScripts"中的方法。
我们如何克服这一点?
以下是脚本中的一些代码:
ShowForm.gs:
function showForm() {
const form = HtmlService.createTemplateFromFile('Form').evaluate().setHeight(480);
SpreadsheetApp.getUi().showModalDialog(form, 'Request Data Window');
}
SaveData.gs:
function saveData(data) {
const iasRequestsSpreadsheet = SpreadsheetApp.openById('1uQz8q1AE7vs9eJCajnIAPmQZRQgBoZv1mF9dcH9D_l8');
const sheet = iasRequestsSpreadsheet.getSheetByName('page1');
const line = getFirstEmptyRow(sheet);
// request date
sheet.getRange(line, 1).setValue(new Date());
// requested by
sheet.getRange(line, 2).setValue(data.requestedBy);
const currentWorkbook = SpreadsheetApp.getActiveSpreadsheet()
.getName()
.split('-')
.trim();
// product
sheet.getRange(line, 3).setValue(currentWorkbook);
const tabName = SpreadsheetApp.getActiveSheet().getName();
// activity
sheet.getRange(line, 4).setValue(`Do stuffs on ${tabName}`);
// due date
sheet.getRange(line, 6).setValue(data.dueDate);
// status
sheet.getRange(line, 8).setValue('Pending');
// comments
sheet.getRange(line, 9).setValue(data.comments);
}
Form.html:附言:我删除了Materialize的内容,这样就可以更容易地阅读@Rubén的建议。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<form>
<label for="requestedBy">Requested By</label>
<input id="requestedBy" type="text" placeholder="John Doe">
<label for="dueDate">Due Date</label>
<input id="dueDate" class="datepicker">
<label for="comments">Comments</label>
<textarea id="comments" placeholder="Please ignore lines X, Y and Z..." class="materialize-textarea"></textarea>
<button id="btn">
Submit
</button>
</form>
<script>
document.getElementById('btn').addEventListener('click', getData);
function getData() {
var requestedBy = document.getElementById('requestedBy').value;
var dueDate = document.getElementById('dueDate').value;
var comments = document.getElementById('comments').value;
var data = {
requestedBy: requestedBy,
dueDate: dueDate,
comments: comments
};
google.script.run.saveData(data);
}
</script>
</body>
</html>
尝试
在html 中
function getData() {
var data = document.forms[0]
var tab = []
for (var i=0;i<data.length;i++){
if (data[i].type != "button"){
tab.push(data[i].value)
}
}
google.script.run.saveData(tab);
// document.forms[0].reset()
}
单位:gs
function saveData(tab) {
const iasRequestsSpreadsheet = SpreadsheetApp.openById('exampleid');
const sheetName = iasRequestsSpreadsheet.getSheetByName('examplename');
sheetName.getRange(1, 1,1,tab.length).setValues([tab]);
}