编辑时自动更新时间戳

问题描述 投票:0回答:5

我有一个包含多列的电子表格。当任何列更新时,我需要它来更新第 5 列(即我们的时间戳列)上的时间戳:

https://docs.google.com/spreadsheets/d/1zOKwPL0LMtWpcbhji6XDi-8Sx3-WfxRXnboZ_Le0wZo/edit?usp=sharing

但我一生都无法弄清楚为什么它不起作用。

google-sheets
5个回答
0
投票

尝试来自 stackexchange

的答案
function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
   var r = s.getActiveCell();
   if( r.getColumn() == 13 ) { //checks the column
     var nextCell = r.offset(0, 1);
     if( nextCell.getValue() === '' ) //is empty?
       var time = new Date();
       time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
       nextCell.setValue(time);
   };
 };
}

您可以尝试添加 Google Apps 脚本来捕获编辑单元格的时间,并向不同的单元格添加时间戳


0
投票

经过一些小的编辑并删除切片器后,您当前的脚本将可以工作(将时间戳放入列

I

    进入 Apps 脚本并更正工作表名称:
if (r.getColumn() < 9 && ss.getName()=='Sheet1') { // 2. If Edit is done in any column before Column (I) And sheet name is Sheet1 then:
至:

if (r.getColumn() < 9 && ss.getName()=='Sheet 1') { // 2. If Edit is done in any column before Column (I) And sheet name is Sheet1 then:

  1. 在 Apps 脚本编辑器中,使用

    Legacy editor

     并单击脚本编辑器上方菜单中的 
    File > Project properties > Time Zone
     来更改应用程序脚本的时区。

  2. 保存 Apps 脚本,然后返回到电子表格。

  3. 单击

    File > Spreadsheet settings

     更改 G-Sheets 时区(以匹配您在 Apps 脚本中选择的时区)
    

  4. 取下切片器

  5. 测试脚本是否正常工作

我已经尝试了几个通常可以工作的脚本(没有切片器),但是切片器会干扰所有这些脚本,因此我无法为您提供在使用切片器时与当前电子表格设计一起使用的脚本。


对于在任何其他列中进行任何编辑时将时间戳放入 E 列的脚本,您可以尝试以下操作:

const sh = SpreadsheetApp.getActiveSheet(); const SHEETNAME = 'Sheet 1'; // SHEET to MONITOR const COLTSL = 'E'; // COLUMN LETTER to TIMESTAMP function onEdit(e) { let r = sh.getActiveCell(); // If Edit is done in any column other than the timestamp column, And sheet name is Sheet 1 then: if (r.getColumn() !== COLTSL && sh.getName() == SHEETNAME) { let celladdress = COLTSL + r.getRowIndex() sh.getRange(celladdress).setValue(new Date()).setNumberFormat("dd/MM/yyyy hh:mm"); } }
但是,这仍然存在限制,即当您启用切片器时,setValue 将无法正常工作(某些行有效,其他行无效)。


0
投票
不确定您的问题是否得到解决。这一年我和你经历了同样的挣扎,我找到了一个非常适合我的情况的解决方案。

我的案例的一些

背景

    我的电子表格中有多个工作表可以运行并生成 时间戳
  • 我想跳过第一张表而不运行生成时间戳 在里面
  • 我想要每次编辑,即使我从 Excel 粘贴到的每个值 生成时间戳
  • 我希望时间戳是单独的,每一行都有自己的 时间戳精确到每秒
  • 当我在时,我不希望完全刷新整个工作表时间戳 编辑任何其他行
  • 我有一列必须填写值来证明是否合理 需要为该特定行生成时间戳
  • 我只想在专用列上指定我的时间戳
function timestamp() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const totalSheet = ss.getSheets(); for (let a=1; a<totalSheet.length; a++) { let sheet = ss.getSheets()[a]; let range = sheet.getDataRange(); let values = range.getValues(); function autoCount() { let rowCount; for (let i = 0; i < values.length; i++) { rowCount = i if (values[i][0] === '') { break; } } return rowCount } rowNum = autoCount() for(let j=1; j<rowNum+1; j++){ if (sheet.getRange(j+1,7).getValue() === '') { sheet.getRange(j+1,7).setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss"); } } } }

解释

    首先,我用
  1. const totalSheet
     制作了一个 
    getSheets()
     并运行它
    带有 
    for
     循环。即识别总张数
    在该电子表格内。请注意,在这里,我做了
    let a=1;
    假设所有 JavaScript 都一样,以 
    0
     开头,值 
    1
    跳过第一张纸并从第二张纸开始运行
  2. 然后,你会注意到一个功能
  3. let sheet = ss.getSheets()[a]
    循环内。请注意,如果
    
    变量中的值不断变化
    ,所以使用
    
    const反而可以正常工作。
    然后,你会看到一个
    let
  4. 。那就是做一个
  5. function autoCount()
    循环来计算其中已编辑值的行数。这
    
    for
     是导航脚本进行搜索
    浏览整个有价值的工作表,查看行 
    if (values[i][0] === '')
     并
    列
    i
    。这里,
    0
    表示的是第
    第一列
    工作表,
    0 是工作表的行。是的,它的工作原理就像 i
     具有 
    json
     感觉的物体。
    然后,您可以通过运行以下命令找到编辑的行数
    
    panda
  6. 。给它一个
  7. autoCount()
     变量来包含结果。
    然后,将 
    rowNum
  8. 传递到新的
  9. rowNum
     循环中,并使用 
    for
     来确定哪一行
    尚未使用时间戳进行编辑。请注意,此处的 
    if (sheeet.getRange(j+1,7).getValue() === '')
    指示工作表的
    第7列
    是我想要的地方
    时间戳。
    7
  10. 循环内,是
  11. for
     指定日期
    格式为
    setValue
    。您可以自由编辑任何内容
    喜欢的风格
    ohya,请记住部署以激活事件类型的触发器
    如 
    ("yyyy-MM-dd hh:mm:ss")
  12. 。这不仅限于编辑,还适用于各种 更改
  13. 包括粘贴
    这是它的外观的屏幕截图:

First Column Value 7th Column Timestamp最后,在决定是否使用适用于您的案例的解决方案之前,请注意我的一些背景。干杯,祝编码愉快~!

不再需要脚本:

0
投票
On Change

enter image description here更多信息:https://stackoverflow.com/a/66201717/5632629

出色的配方。为我工作。谢谢你

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.