Google 工作表:在日志中记录单元格的新值 sheet
Google Sheets: Logging a Cells new value on a log sheet
我正在为分类帐工作编写一个 onEdit 函数sheet。
我在一家音乐工作室工作,随着我们的成长和改进,我们逐渐增加每首曲目的成本以支付开销和新的工作室设备。
但是,我们希望保留我们以前的客户每首歌曲的费率。
我发现执行此操作的最佳方法是使用 vlookup table 搜索单独的价格日志 sheet。
但我想自动记录新价格,以避免忘记价格何时更改或忘记将所有价格记录在一起。
对我来说理想的解决方案是:
[onEdit] 如果活动 sheet 是 'setup' 并且活动单元格是 'C6']
{将 C6 新值复制到名为 'log' 的页面中 B 列的第一个空闲行}。
下面是我为艺术家自动添加不同时间的代码,最底部是我试图将新价格复制到“log.
我还做了一个非常简单的示例sheet来更好地说明我的目标。
function onEdit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var sheetName = "Boring";
var sheet1 = ss.getSheetByName("Roster");
var sheet2 = ss.getSheetByName("Ledger");
var sheet3 = ss.getSheetByName("Setup");
var sheet4 = ss.getSheetByName("Invoice");
var sheet5 = ss.getSheetByName("Boring");
var Log = ss.getSheetByName("Log");
var r = s.getActiveCell();
var Change = sheet3.getRange('C6');
var row = r.getRow();
var time = new Date();
var sheet = s.getSheetName();
var letter = r.getColumn() ;
var Tracking = sheet1.getRange('E' + row.toString()).getValue();
var Editing = sheet1.getRange('F' + row.toString()).getValue();
var Mixing =sheet1.getRange('G' + row.toString()).getValue();
var Master =sheet1.getRange('H' + row.toString()).getValue();
var date = sheet2.getRange('C' + row.toString()).isBlank();
switch (sheet){
case'Roster':
switch(letter){
case 5 :
switch (Tracking){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('S' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);}
break;
case 5 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('T' + row.toString()).setValue(time);
break;
case "":
ss.getRange("S"+row).clearContent();
ss.getRange("T"+row).clearContent();
break;
}//switch tracking
break;
case 6:
switch (Editing){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('U' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);}
break;
case 4 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('V' + row.toString()).setValue(time);
break;
case "":
ss.getRange("U"+row).clearContent();
ss.getRange("V"+row).clearContent();
break;
}
break;
case 7 :
switch (Mixing) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('W' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);}
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('X' + row.toString()).setValue(time);
break;
case "":
ss.getRange("W"+row).clearContent();
ss.getRange("X"+row).clearContent();
break;
}
break;
case 8 :
switch(Master) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Y' + row.toString()).setValue(time);
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Z' + row.toString()).setValue(time);
break;
case "":
ss.getRange("Y"+row).clearContent();
ss.getRange("Z"+row).clearContent();
break;
}
break;
}
break;
case'Setup':
switch (letter){
case 'C' :
switch (row){
case 6 :
var targetSheet = ss.getSheetByName("Log"); //gets the lgo sheet
var target = Log.getRange(Log.getLastRow() + 1, 1);// "log"
var nextCell = r.offset(0, 1);
sheet3.getRange(3, 6, 1).copyTo(target, {contentsOnly:true});
break;}}
}
}
这是我的传播的极其简化的版本sheet。
https://docs.google.com/spreadsheets/d/1i192uK-a-ALim7pvL-mkty_1nh_m9aghvmrxmiiRYKs/edit?usp=sharing
这是我的真人 sheet 如果你需要看的话
https://docs.google.com/spreadsheets/d/1PK0-WsfdRtFooLWb1GUCHjxGoQJHFLAg4CVh8pmuEO4/edit?usp=sharing
对于提供的示例 sheet,试试这个脚本:
示例脚本:
/*@description: [onEdit] If the active sheet is 'Setup' and active cell is 'A4'] {Copy A4 new value to first free row in column B in the page called 'log'}.*/
function onEdit(e){
var rng = e.range;
var ss = e.source;
if(rng.getA1Notation()==='A4' && rng.getSheet().getName()=='Setup'){
ss.getSheetByName('log').appendRow([new Date(),e.value])
}
}
参考文献:
我正在为分类帐工作编写一个 onEdit 函数sheet。 我在一家音乐工作室工作,随着我们的成长和改进,我们逐渐增加每首曲目的成本以支付开销和新的工作室设备。 但是,我们希望保留我们以前的客户每首歌曲的费率。 我发现执行此操作的最佳方法是使用 vlookup table 搜索单独的价格日志 sheet。 但我想自动记录新价格,以避免忘记价格何时更改或忘记将所有价格记录在一起。
对我来说理想的解决方案是:
[onEdit] 如果活动 sheet 是 'setup' 并且活动单元格是 'C6']
{将 C6 新值复制到名为 'log' 的页面中 B 列的第一个空闲行}。
下面是我为艺术家自动添加不同时间的代码,最底部是我试图将新价格复制到“log.
我还做了一个非常简单的示例sheet来更好地说明我的目标。
function onEdit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var sheetName = "Boring";
var sheet1 = ss.getSheetByName("Roster");
var sheet2 = ss.getSheetByName("Ledger");
var sheet3 = ss.getSheetByName("Setup");
var sheet4 = ss.getSheetByName("Invoice");
var sheet5 = ss.getSheetByName("Boring");
var Log = ss.getSheetByName("Log");
var r = s.getActiveCell();
var Change = sheet3.getRange('C6');
var row = r.getRow();
var time = new Date();
var sheet = s.getSheetName();
var letter = r.getColumn() ;
var Tracking = sheet1.getRange('E' + row.toString()).getValue();
var Editing = sheet1.getRange('F' + row.toString()).getValue();
var Mixing =sheet1.getRange('G' + row.toString()).getValue();
var Master =sheet1.getRange('H' + row.toString()).getValue();
var date = sheet2.getRange('C' + row.toString()).isBlank();
switch (sheet){
case'Roster':
switch(letter){
case 5 :
switch (Tracking){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('S' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);}
break;
case 5 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('T' + row.toString()).setValue(time);
break;
case "":
ss.getRange("S"+row).clearContent();
ss.getRange("T"+row).clearContent();
break;
}//switch tracking
break;
case 6:
switch (Editing){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('U' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);}
break;
case 4 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('V' + row.toString()).setValue(time);
break;
case "":
ss.getRange("U"+row).clearContent();
ss.getRange("V"+row).clearContent();
break;
}
break;
case 7 :
switch (Mixing) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('W' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);}
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('X' + row.toString()).setValue(time);
break;
case "":
ss.getRange("W"+row).clearContent();
ss.getRange("X"+row).clearContent();
break;
}
break;
case 8 :
switch(Master) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Y' + row.toString()).setValue(time);
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Z' + row.toString()).setValue(time);
break;
case "":
ss.getRange("Y"+row).clearContent();
ss.getRange("Z"+row).clearContent();
break;
}
break;
}
break;
case'Setup':
switch (letter){
case 'C' :
switch (row){
case 6 :
var targetSheet = ss.getSheetByName("Log"); //gets the lgo sheet
var target = Log.getRange(Log.getLastRow() + 1, 1);// "log"
var nextCell = r.offset(0, 1);
sheet3.getRange(3, 6, 1).copyTo(target, {contentsOnly:true});
break;}}
}
}
这是我的传播的极其简化的版本sheet。 https://docs.google.com/spreadsheets/d/1i192uK-a-ALim7pvL-mkty_1nh_m9aghvmrxmiiRYKs/edit?usp=sharing
这是我的真人 sheet 如果你需要看的话 https://docs.google.com/spreadsheets/d/1PK0-WsfdRtFooLWb1GUCHjxGoQJHFLAg4CVh8pmuEO4/edit?usp=sharing
对于提供的示例 sheet,试试这个脚本:
示例脚本:
/*@description: [onEdit] If the active sheet is 'Setup' and active cell is 'A4'] {Copy A4 new value to first free row in column B in the page called 'log'}.*/
function onEdit(e){
var rng = e.range;
var ss = e.source;
if(rng.getA1Notation()==='A4' && rng.getSheet().getName()=='Setup'){
ss.getSheetByName('log').appendRow([new Date(),e.value])
}
}