首页 > 解决方案 > 谷歌脚本复制公式结果的值

问题描述

我必须将三个单元格从一张表复制到另一张表才能处理该表上的公式。然后我需要将公式输出复制到第一张纸上。我的副本适用于“输入单元格”,但是当我对公式单元格使用同一行代码时,它不会采用正确的输入值。我想我需要先选择一个单元格来遍历这些值,但它不起作用。这是原始代码。

var spreadsheet = SpreadsheetApp.getActive();

//copy values for formula cells
spreadsheet.getSheetByName('Sheet6').getRange(2,3).copyTo(spreadsheet.getSheetByName('student').getRange(1,1).activate(), {contentsOnly:true}); 
spreadsheet.getSheetByName('Sheet6').getRange(2,4).copyTo(spreadsheet.getSheetByName('student').getRange(2,1).activate(), {contentsOnly:true});    
spreadsheet.getSheetByName('Sheet6').getRange(2,5).copyTo(spreadsheet.getSheetByName('student').getRange(3,1).activate(), {contentsOnly:true});

//copy formula output to sheet
spreadsheet.getSheetByName('student').getRange(2,22).copyTo(spreadsheet.getSheetByName('Sheet6').getRange(2,6).activate(), {contentsOnly:true});

谢谢

标签: google-apps-scriptgoogle-sheets

解决方案


对单元格的所有更改都将被缓冲,直到脚本处理结束。因此,您需要将该.flush()方法应用于学生电子表格。

var studentSheet = spreadsheet.getSheetByName('student');
var sourceSheet = spreadsheet.getSheetByName('Sheet6');

// copyTo rows
sourceSheet.getRange(2, 5)
    .copyTo(studentSheet.getRange(3, 1), {contentsOnly: true});
...

SpreadsheetApp.flush(); // applies all values to the student spreadsheet
                        // and therefore all the formula cells update

// get value from calculated formula cell
studentSheet.getRange(2, 22)
    .copyTo(sourceSheet.getRange(2, 6), {contentsOnly: true});

flush()的文档。


推荐阅读