google-apps-script - setValues() 函数问题
问题描述
我想在工作表末尾插入选项卡内容。函数 appendRows() 工作得很好,但想在特定范围内添加数据。
我用 setValues 尝试了很多东西,但没有任何效果。
这是我的代码的一部分。
// File used
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Sheet used
var sheet = ss.getActiveSheet();
// Data range
var sheetDataRange = sheet.getDataRange();
// The last sheet row with data in
var sheetLastRow = sheet.getLastRow();
// The last sheet column with data in
var sheetLastColumn = sheet.getLastColumn();
function processFormAddCustomer(formObject) {
var rowsValues = [
formObject.customer,
formObject.contractScope]
.concat(
fillCell(formObject.acType),
formObject.classrooms,
formObject.license,
formObject.licenseExpiration,
formObject.indexDeliveredInitial,
formObject.shipmentDateInitial,
formObject.implementationDateInitial
);
//SpreadsheetApp.getUi().alert(rowsValues);
//sheet.appendRow(rowsValues);
var test = sheet.getRange(sheetLastRow+1, 1, 1, rowsValues.length).getA1Notation(); // Already tried without A1Notation
test.setValues(rowsValues);
SpreadsheetApp.getUi().alert("The customer was successfully added");
... //Nothing important
}
rowValues var 包含我想要的数据。它们来自一个 html 表单。
更新:
我有两个按钮与两个不同的脚本相关联。如果您单击这些按钮,则会为每个按钮显示一个不同的 html 表单。用户可以插入值并单击提交。有文本输入,下拉菜单,......我想在最后一行和前十列中插入第一个表单的数据。我想在第 11 到 13 列的同一行中插入其他表单数据。
“formObject.id”是用户在表单中录制的数据。
这是代码的另一部分。
<!-- JavaScriptAddCustomer.html -->
<script>
/*
* The window will not close when the form is submited
*/
function preventFormSubmitAddCustomer() {
var formsAddCustomer = document.querySelectorAll('FormAddCustomer');
for (var i; i < formsAddCustomer.length; i++) {
formsAddCustomer[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
// The page is not refreshed when the button submit is pressed
window.addEventListener('load', preventFormSubmit);
/*
* Calls the form
*/
function handleFormSubmitAddCustomer(formObject) {
google.script.run.processFormAddCustomer(formObject);
document.getElementById("addCustomerForm").reset();
}
// ????
function formSubmit() {
var customerDropdown = document.getElementById("customer");
var selectedCustomer = e.value;
var acTypeDropdown = document.getElementById("acType"); // SI bu essayer AcType
var selectedAcType = e.value;
google.script.run.getSelectDatas(document.forms[0]);
}
</script>
<!-- FormAddCustomer.html -->
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- form -->
<form id="addCustomerForm" onsubmit="handleFormSubmitAddCustomer(this)">
<!-- // Mettre ; pour appeler 2 fctns dans onSubmit ? -->
<label for="customer">Customer *</label><br/>
<input type="text" id="customer" name="customer" placeholder="Required"><br/><br/>
<label for="contractScope">Contract Scope *</label><br/>
<select name="contractScope" id="contractScope" > <!-- onEdit="moreLicencesOption(this);" -->
<option value=""> </option><br/>
<option value="ACE"> ACE</option><br/>
<option value="ACT Suite"> ACT Suite</option><br/>
<option value="ACT for Academy"> ACT for Academy</option><br/>
<option value="AKM"> AKM</option><br/>
<option value="ATC Maintenance"> ATC Maintenance </option><br/>
<option value="ATC Flight"> ATC Flight </option><br/>
<option value="ATC Cabin"> ATC Cabin </option><br/>
<option value="CKM"> CKM</option><br/>
<option value="CTS"> CTS</option><br/>
<option value="FTS"> FTS</option><br/>
<option value="MTS3"> MTS3</option><br/>
<option value="PA"> PA</option><br/>
<option value="SKM"> SKM</option>
</select><br/><br/>
<label for="acType">AC Type *</label><br/>
<select multiple id="acType" name="acType">
<option value="A380"> A380 </option><br/>
<option value="A350"> A350 </option><br/>
<option value="A340"> A340 </option><br/>
<option value="A330"> A330 </option><br/>
<option value="A320"> A320 </option><br/>
<option value="A220"> A220 </option><br/>
<option value="Common (MPP Tools Menu)"> Common (MPP Tools Menu)</option>
</select><br/><br/>
<label for="classrooms">Classrooms</label><br/>
<input type="text" id="classrooms" name="classrooms"><br/><br/>
//...
在此先感谢您的帮助。
解决方案
Issues:
- setValues(values) accepts a 2D array, and you are providing a simple array (
rowsValues
) instead. - getA1Notation() returns a
String
, not a Range. There's no point in using that, and it will cause an error for sure, since a String doesn't have a methodsetValues
.
Solution:
Since your desired Range
has a single row and several columns, you should provide a 2D array whose outer array contains a single element corresponding to the simple array of data you want to append (rowsValues
):
var test = sheet.getRange(sheetLastRow+1, 1, 1, rowsValues.length);
test.setValues([rowsValues]);
推荐阅读
- c# - 将共享路径中的图像添加到 PDF 文档 iTextSharp
- macos - 如何在 vagrant box 中解析域?
- python - if 置换生成器中的条件
- php - EDIT: how to automatically add data from a field when called
- java - 使用 coalesce(1) 将数据集写入 s3 需要花费太多时间
- ios - Different look at iPhone 8 and iPhone X
- java - 在命令行中构建项目时如何更改存储库的 Maven 构建路径
- java - Java 反射:扩展类的类的访问方法
- javascript - 带有角度 6 的 Firebase 导入问题?
- python - How do I get DOT to output its node?