Google Sheet "master" 在不同的选项卡上填充 "child"
Google Sheet "master" to populate "child" on different tabs
我想要一个主要的 "master" Google Sheet 写入另一个 "child" Google [=] 的单独 sheets 40=],基于一个Status条件。如果一个项目是 "Finished"、"Approved" 或 "Ready",它们将显示在它们自己的选项卡上。我用 Functions 解决了这个问题,但它很笨重,并且在单个 sheet 中有一个 Fetch 限制。我已经研究过 JavaScript(我认为这是最简单的答案),但我做错了,并且找不到能够准确定义我要完成的目标的样本。
这就是我想要做的:
IF "Management" sheet & column "Status" = "Finished"
THEN write to "Production" sheet on the "Finished" tab
ELSE IF "Management" sheet & column "Status" = "Approved"
THEN write to "Production" sheet on the "Approved" tab
ELSE IF "Management" sheet & column "Status" = "Ready"
THEN write to "Production" sheet on the "Ready" tab
这个需要实时更新
"Management" sheet 将驱动(填充)"Production" sheet:
https://docs.google.com/spreadsheets/d/19NIn4TukYnKkkpOg8E8s-6loS8rCplf-tGpY2cENIwQ/edit?usp=sharing
"Production" sheet 是一个虚拟对象,仅显示我希望脚本执行的操作:
https://docs.google.com/spreadsheets/d/1aCh0_GzQKzbUxWAn8e27q0-z48tmxK0mK8wGMm2YDuk/edit?usp=sharing
我知道使用数据库更好,但我的管理层已经放弃了一个非常好的基于 Access 的 MIS($),转而使用免费传播sheet 系统。他们把它留给了我们这些几乎没有编程知识的中层管理人员来让它发挥作用。我有点编程知识,如果算上COBAL和1978 AppleSoft!
在源传播sheet中,设置在编辑时运行的简单触发器。当您编辑源传播中的单元格时sheet,会引发一个事件对象并将其作为参数传递给 onEdit() 函数。
该函数检查事件的上下文,并在满足所有条件时尝试写入目标 sheet。该函数使用输入的值在目标文件中查找相关的 sheet。如果 sheet 不存在,它会在源文件中显示错误消息。
function onEdit(event){
var sourceSpreadsheet = event.source;
var targetSpreadsheet = SpreadsheetApp.openById(yourId); //spreadsheet to write to
var sheet = sourceSpreadsheet.getActiveSheet(); //sheet that was edited
var row = event.range.getRow();
var col = event.range.getColumn();
var statusColNumber = 2; //column number of the 'Status' column
if(sheet.getName() == "Management" && col == statusColNumber){
var value = event.value;
if(!value) { //checking if the value is an empty string or undefined
return;
}
try {
var targetSheet = targetSpreadsheet.getSheetByName(value);
targetSheet.getRange("A1").setValue("Hello from row number " + row);
} catch(error) {
sourceSpreadsheet.toast("Failed. Sheet " + value + " not found in target spreadsheet");
}
}
我想要一个主要的 "master" Google Sheet 写入另一个 "child" Google [=] 的单独 sheets 40=],基于一个Status条件。如果一个项目是 "Finished"、"Approved" 或 "Ready",它们将显示在它们自己的选项卡上。我用 Functions 解决了这个问题,但它很笨重,并且在单个 sheet 中有一个 Fetch 限制。我已经研究过 JavaScript(我认为这是最简单的答案),但我做错了,并且找不到能够准确定义我要完成的目标的样本。
这就是我想要做的:
IF "Management" sheet & column "Status" = "Finished"
THEN write to "Production" sheet on the "Finished" tab
ELSE IF "Management" sheet & column "Status" = "Approved"
THEN write to "Production" sheet on the "Approved" tab
ELSE IF "Management" sheet & column "Status" = "Ready"
THEN write to "Production" sheet on the "Ready" tab
这个需要实时更新
"Management" sheet 将驱动(填充)"Production" sheet: https://docs.google.com/spreadsheets/d/19NIn4TukYnKkkpOg8E8s-6loS8rCplf-tGpY2cENIwQ/edit?usp=sharing
"Production" sheet 是一个虚拟对象,仅显示我希望脚本执行的操作: https://docs.google.com/spreadsheets/d/1aCh0_GzQKzbUxWAn8e27q0-z48tmxK0mK8wGMm2YDuk/edit?usp=sharing
我知道使用数据库更好,但我的管理层已经放弃了一个非常好的基于 Access 的 MIS($),转而使用免费传播sheet 系统。他们把它留给了我们这些几乎没有编程知识的中层管理人员来让它发挥作用。我有点编程知识,如果算上COBAL和1978 AppleSoft!
在源传播sheet中,设置在编辑时运行的简单触发器。当您编辑源传播中的单元格时sheet,会引发一个事件对象并将其作为参数传递给 onEdit() 函数。
该函数检查事件的上下文,并在满足所有条件时尝试写入目标 sheet。该函数使用输入的值在目标文件中查找相关的 sheet。如果 sheet 不存在,它会在源文件中显示错误消息。
function onEdit(event){
var sourceSpreadsheet = event.source;
var targetSpreadsheet = SpreadsheetApp.openById(yourId); //spreadsheet to write to
var sheet = sourceSpreadsheet.getActiveSheet(); //sheet that was edited
var row = event.range.getRow();
var col = event.range.getColumn();
var statusColNumber = 2; //column number of the 'Status' column
if(sheet.getName() == "Management" && col == statusColNumber){
var value = event.value;
if(!value) { //checking if the value is an empty string or undefined
return;
}
try {
var targetSheet = targetSpreadsheet.getSheetByName(value);
targetSheet.getRange("A1").setValue("Hello from row number " + row);
} catch(error) {
sourceSpreadsheet.toast("Failed. Sheet " + value + " not found in target spreadsheet");
}
}