我有两张纸和#34;重量"和" Marks_All"。我想做以下事情:
wt1
和wt2
E
,R
和AM
(从第4行到第94行;所有三列各有90个值)AS
中的值(从第4行到第94行; 90个值)
醇>
(E [row]中的值)+(R [row]中的值)*
wt1
+(AM [row]中的值)*wt2
以下代码给出了一个输出,但是有更好的方法吗?
function Result () {
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss1.getSheetByName("Weight");
var wt1= sheet1.getRange("C4").getValue();
var wt2=sheet1.getRange("C10").getValue();
var ss2 = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = ss2.getSheetByName("Marks_All");
for (var row = 4 ;row < 95; row++) {
{
var range1 = sheet2.getRange(row,5).getValue();
var range2 = sheet2.getRange(row,18).getValue();
var range3 = sheet2.getRange(row,39).getValue();
var Result = range1+range2*wt1+range3*wt2;
sheet2.getRange(row,45).setValue(Result);
}
}
答案 0 :(得分:1)
这次修改怎么样?
Weight
和Marks_All
。因此,您只需声明一次SpreadsheetApp.getActiveSpreadsheet()
即可使用每张表。getValue()
和setValue()
效率不高。因此,请使用getValues()
和setValues()
。
function Result () {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Weight");
var sheet2 = ss.getSheetByName("Marks_All");
var wt1 = sheet1.getRange("C4").getValue();
var wt2 = sheet1.getRange("C10").getValue();
var values = ss.getRange("A4:AM94").getValues(); // Modified: Retrieve values
var results = values.map(function(e){return [e[4] + e[17] * wt1 + e[38] * wt2]}); // Modified: Calculate the retrieved values
sheet2.getRange(4, 45, results.length, results[0].length).setValues(results); // Modified: Put the calculated values
}
如果我误解了你的问题,我很抱歉。