我正在尝试使用他们的脚本在 Google 表格中执行以下操作。
1) 接受来自用户的多个输入 2) 将当前最后一行复制/粘贴到下面的新行(最后一行包含我想重复使用的公式) 3) 获取多个输入并在新的最后一行中填写某些单元格。
例如,我有一个带有标签的列:产品、数量、成本、税收、运输、购买。产品、数量、成本是用户输入。 Tax、Ship 和 Buy 是公式。
我想以一种形式提示用户输入“产品”、“数量”、“成本”。
然后我想把最后一行复制下来,把“Product”、“Quantity”、“Cost”的结果输入到新的最后一行。
这是我目前的脚本,我觉得我很接近:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Evaluate')
.addItem('Add New Row', 'addNewRow')
.addItem('Compare', 'getData')
.addToUi();
}
var ss = SpreadsheetApp.getActive();
function addNewRow() {
var sh = ss.getActiveSheet(), lRow = sh.getLastRow();
var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
sh.insertRowsAfter(lRow, 1);
range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}
function getData() {
var ui = SpreadsheetApp.getUi();
var result = ui.prompt(
'Product',
ui.ButtonSet.OK_CANCEL);
var productName = result.getResponseText();
var sh = ss.getActiveSheet();
var lRow = sh.getLastRow(), lCol = sh.getLastColumn();
var productRange = sh.getRange(lRow,1).setValue(productName);
}
我想不通: 1) 如何创建接受多个输入的提示 2) 如何根据列标题将其放置在单元格中(那样似乎更有效)
谢谢。
最佳答案
这是一个示例,说明如何创建接受多个值的 HTML 对话框。它还有其他一些东西。
Code.gs 文件:
function doGet()
{
var html = HtmlService.createHtmlOutputFromFile('index');
return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
function showDialog()
{
var ui=HtmlService.createHtmlOutputFromFile('index');
SpreadsheetApp.getUi().showModelessDialog(ui,'Title');
}
function getData(a)
{
var ts = Utilities.formatDate(new Date(), "GMT-6", "M/d/yyyy' 'HH:mm:ss");
a.splice(0,0,ts);
var ss=SpreadsheetApp.openById('SPREADSHEETID')
ss.getSheetByName('Form Responses 1').appendRow(a);
return true;
}
function getURL()
{
var ss=SpreadsheetApp.openById('SPREADSHEETID');
var sht=ss.getSheetByName('imgURLs');
var rng=sht.getDataRange();
var rngA=rng.getValues();
var urlA=[];
for(var i=1;i<rngA.length;i++)
{
urlA.push(rngA[i][0]);
}
return urlA;
}
index.html 文件:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="data">
<br />Text 1<input name="t1" type="text" size="15" id="txt1" placeholder="Text 1" />
<br />Text 2<input name="t2" type="text" size="15" id="txt2" placeholder="Text 2" />
<br />Text 3<input name="t3" type="text" size="15" id="txt3" placeholder="Text 3" />
<br />Text 4<input name="t4" type="text" size="15" id="txt4" placeholder="Text 4" />
<br /><input type="radio" name="Type" value="Member" checked />Member
<br /><input type="radio" name="Type" value="Guest" />Guest
<br /><input type="radio" name="Type" value="Intruder" />Intruder
<br /><input type="button" value="submit" id="btn1" />
<br /><img id="img1" src="" alt="img1" width="300" />
</div>
<div id="resp" style="display:none;">
<h1>Response</h1>
<p>Your data has been received.</p>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function() {
$('#btn1').click(validate);
$('#txt4').val('');
$('#txt3').val('');
$('#txt2').val('');
$('#txt1').val('')
google.script.run
.withSuccessHandler(setURL)
.getURL();
});
function setURL(url)
{
$('#img1').attr('src',url[0]);
}
function setResponse(a)
{
if(a)
{
$('#data').css('display','none');
$('#resp').css('display','block');
}
}
function validate()
{
var txt1 = document.getElementById('txt1').value || '';
var txt2 = document.getElementById('txt2').value || '';
var txt3 = document.getElementById('txt3').value || '';
var txt4 = document.getElementById('txt4').value || '';
var type = $('input[name="Type"]:checked').val();
var a = [txt1,txt2,txt3,txt4,type];
if(txt1 && txt2 && txt3 && txt4)
{
google.script.run
.withSuccessHandler(setResponse)
.getData(a);
return true;
}
else
{
alert('All fields must be completed.');
}
}
function loadTxt(from,to)
{
document.getElementById(to).value = document.getElementById(from).value;
}
function radioValue()
{
var radios = document.getElementsByName('genderS');
for (var i = 0, length = radios.length; i < length; i++)
{
if(radios[i].checked)
{
return radios[i].value;
}
}
}
console.log('My Code');
</script>
</body>
</html>
关于google-apps-script - 接受来自用户的多个输入并添加到新行中的某些单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229279/