google-apps-script - 为什么函数 submitData 不将字段添加到指定的工作表?
问题描述
我对此完全陌生。我看到了一个没有表格的数据输入脚本。我遵循了其他地方建议的脚本,但它没有更新指定工作表中的值。数据表中的格式会成为问题吗?我应该附上文件吗?
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("New Data"); //Data Entry Sheet
var datasheet = ss.getSheetByName("Business Info"); //Business Info Data Sheet
//Input Values
var values = [[formSS.getRange("B3").getValue(),
formSS.getRange("B4").getValue(),
formSS.getRange("B5").getValue(),
formSS.getRange("B6").getValue(),
formSS.getRange("B7").getValue(),
formSS.getRange("B8").getValue(),
formSS.getRange("B9").getValue(),
formSS.getRange("B10").getValue(),
formSS.getRange("B11").getValue(),
formSS.getRange("B13").getValue(),
formSS.getRange("B14").getValue(),
formSS.getRange("B15").getValue(),
formSS.getRange("B16").getValue(),
formSS.getRange("B17").getValue(),
formSS.getRange("B18").getValue(),
formSS.getRange("B19").getValue(),
formSS.getRange("B20").getValue(),
formSS.getRange("B21").getValue(),
formSS.getRange("B23").getValue(),
formSS.getRange("B24").getValue(),
formSS.getRange("B25").getValue(),
formSS.getRange("B26").getValue(),
formSS.getRange("B27").getValue(),
formSS.getRange("B28").getValue(),
formSS.getRange("B29").getValue(),
formSS.getRange("B30").getValue(),
formSS.getRange("B31").getValue(),]];
datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 27).setValues(values);
}
function clear1() {
var sheet = SpreadsheetApp.getActive().getSheetByName("New Data");
var rangesToClear = ["B3","B4","B5","B6","B7","B8","B9","B10","B11","B13","B14","B15","B16","B17","B18","B19","B20","B21","B23","B24","B25","B26","B27","B28","B29","B30","B31"];
for (var i=0; i<rangesToClear.length; i++) {
sheet.getRange(rangesToClear[i]).clearContent();
}
}
function onEdit(e) {
e.source.setActiveSelection(e.range.offset(1, 0));
}
解决方案
你可以这样做:
function submitData() {
const ss=SpreadsheetApp.getActive();
const fsh=ss.getSheetByName("New Data");
const frg=fsh.getRange(1,2,31,1);
const vs=frg.getValues();
const dsh=ss.getSheetByName("Business Info");
const out=new Set([1,2,12,22]);
let values=vs.map(function(r,i){if(!out.has(i+1))return r;}).filter(function(e){return e;});
dsh.getRange(dsh.getLastRow()+1,1,1,27).setValues(values);
//clear1();
}
function clear1() {
var sheet = SpreadsheetApp.getActive().getSheetByName("New Data");
var rangesToClear = ["B3","B4","B5","B6","B7","B8","B9","B10","B11","B13","B14","B15","B16","B17","B18","B19","B20","B21","B23","B24","B25","B26","B27","B28","B29","B30","B31"];
for (var i=0; i<rangesToClear.length; i++) {
sheet.getRange(rangesToClear[i]).clearContent();
}
}
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()!="New Data")return;
e.source.setActiveSelection(e.range.offset(1, 0));
}//I'm guessing your doing this to get the cursor to move down after every entry but you will have problems on rows 12 and 22
然后您可以创建并安装一个提交按钮,如此处所示。我假设您希望在单击按钮时运行 submitData() 函数,并可能在 submitData() 的末尾添加调用 clear1 的命令。您还可以使用侧边栏创建 html 按钮,这些按钮可以做同样的事情,但它们使用 google.script.run 来调用服务器上的任何函数。
推荐阅读
- amazon-web-services - 有没有办法从 URL 列表中将 50000 个图像文件上传到 Amazon S3 Bucket
- python - python 3将值从一个sqlite数据库中的分隔表中存储到列表中
- python - 如何打印 ACTUAL SQLAlchemy 查询以进行故障排除:SQLAlchemy 过滤器语句将过滤器条件替换为 %(column_name_1)s
- html - HTML 输入文本上的日历
- excel - 如何交换多个单元格?
- javascript - 如何在 Vue.js 中使用 JSZip 下载 .zip 文件夹中的多个图像文件
- linux - OCI 运行时执行失败 - Container_linux.go:348
- java - Wildfly 13 具有错误版本的 Maven 依赖项
- kubernetes - 如何使用 watch api 避免丢失历史删除事件
- vispy - 同一视图中的多个图像