【发布时间】:2021-05-18 19:07:11
【问题描述】:
我有一个查找姓名并返回该人的平均值的 vlookup 公式。我在一周内记录这些平均值,并在不同的列中将它们标识为 W1、W2、W3 等。问题是,我导入的数据只有一个平均值,这意味着如果我导入它,它将覆盖我几天前使用相同的报告已经输入的内容,只是一个旧版本。
我的问题是,当 W1 调用的数据发生变化时,我有没有办法阻止 W1 的公式更新?本质上,冻结值?这样我就不必为了保存历史而不断添加新标签来导入新数据。数据很可靠,而且我收集的信息不仅仅是平均值,所以我需要整个数据。
我不介意编写一些有助于解决我的问题的脚本,我只需要一些指导。
编辑:关于编写一个菜单按钮脚本的想法,该按钮将仅在我更新数据之前触发的选定范围内复制、粘贴值?
我希望能够在我的工作表中选择一个范围,选择菜单“保存信息”,让它复制我选择的内容,然后将其粘贴回原来的位置。这将删除在新数据导入时会导致我的值发生变化的公式,并保持我的历史记录不变。
以下是我到目前为止想出的,但我收到了这个错误:
"TypeError: sourceSheet.getDataRange is not a function".
function saveInfo(){
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = spreadSheet.getActiveSheet
var sourceRange = sourceSheet.getDataRange();
var targetSheet = spreadSheet.getActiveSheet();
sourceRange.copyTo(targetSheet.getActiveRange());
}
function updateMenu() {
SpreadsheetApp.getActiveSpreadsheet().updateMenu('Save Info', generateMenu())
};
function onOpen() {
SpreadsheetApp.getActiveSpreadsheet().addMenu('Save Info', generateMenu());
};
function generateMenu() {
var entries = [{
name: "Save Data Before Update",
functionName: "saveInfo"
}];
return entries;
}
有什么想法吗??
谢谢!
【问题讨论】:
-
如果没有其他信息,很难编写脚本。
-
您可能已经想到了这一点……但是您可以使用两个现有的按钮。右键单击,复制范围。右键单击范围上的
paste special --> values。这会将公式转换为值 -
或 Control+Copy,Control+Shift+V 作为热键。
-
@MetaMan 我刚刚添加了一些需要帮助的脚本。菜单工作,但功能不工作。你能看一下吗?
-
将 () 添加到 sourceSheet 变量中的 getActiveSheet() 中。它应该是 var sourceSheet = spreadsheet.getActiveSheet()。
标签: javascript google-apps-script google-sheets freeze