我对Javascript相对较新,特别是循环,但我有一些我认为应该正常工作的代码。它没有返回任何错误,但是当我运行它时没有任何反应。 Stack Overflow帮助我解决了我需要的所有内容,但经过数小时的浏览和实验后,我仍然感到难过。
我认为问题出在我的循环中。我想要完成的事情(插入一系列公式并将其设置为值)并不是那么直接,但即使我尝试简单地将“B”打印到测试单元格,我仍然没有结果。
提前致谢。
function Translate(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("English Responses");
var formulasheet = ss.getSheetByName("Formula Range");
var lastRow = sourceSheet.getLastRow();
var formularange = formulasheet.getRange(1, 2, 1, 18);
var formulas = formularange.getFormulasR1C1();
for (var i = 1; i <= lastRow; i++){
var finishedRange = sourceSheet.getRange([i], 1);
var finishedValue = finishedRange.getValues();
var emptyCheckRange = sourceSheet.getRange([i], 2);
var emptyCheckValue = finishedRange.getValues();
var translationRange = sourceSheet.getRange([i], 2, 1, 18);
if (finishedValue =='A' && emptyCheckValue == ''){
//translationRange.setFormulas(formulas);
emptyCheckValue.setValue("B");
//translationRange.copyValuesToRange(sourceSheet, 1, 18, 1, 1);
}}}
答案 0 :(得分:0)
你的循环看起来不错。你的问题就在这一行:
emptyCheckValue.setValue("B");
emptyCheckValue是一个值而不是范围,因此setValue()将不起作用。如果您将其更改为:
,它将起作用emptyCheckRange.setValue("B");
答案 1 :(得分:0)
根据GAS文档,'Range'类的'getValues()'方法返回二维数组值。 https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues问题就出在这一行:
var emptyCheckValue = finishedRange.getValues();
如果在单元格中输入的值为“A”,则“emptyCheckValue”将为
[['A']] //Each inner array corresponds to a row in your spreadsheet.
如果你调用'getValue()'而不是'getValues()',它就会只是'A'。我想你现在可以看到为什么在'emptyCheckValue'上调用'setValue()'失败了。就像'getValue(s)()'方法一样,它属于Google表格所独有的Range类,因此您需要在“Range”类型的对象的实例上调用此方法。
你的'emptyCheckValue'变量是一个JS数组,所以你只能使用Array.prototype中的方法。要更改工作表,点的左侧变量必须属于“范围”类,例如
finishedRange.setValue('B');
// or
finishedRange.setValues([['B']]); //the 2d array must match the size of the range
最后,迭代这样的值是非常无效且性能成本高的:
var finishedRange = sourceSheet.getRange([i], 1); //brackets around 'i' are not necessary either
您可以简单地将整个数据范围读入2d数组,处理值,并在一个操作中将它们写入工作表。以下是如何在工作表中为1列执行此操作:
var valuesArray = sourceSheet.getRange(startRow, startCol, sourcesheet.getLastRow(), 1).getValues();
var processedValuesArray = valuesArray.map(function(row){
var value = row[0];
//do something with value
return value;
});
然后,您可以获得所需的匹配维度的目标范围,并为其写入新值:
targetRange.setValues(processedValuesArray);