在 gsheet 中的特定列和行上添加时间戳并冻结列

Posted

技术标签:

【中文标题】在 gsheet 中的特定列和行上添加时间戳并冻结列【英文标题】:Adding a time stamp on a specific column and row in gsheet with colimn freeze 【发布时间】:2021-02-01 13:57:09 【问题描述】:

我正在尝试使用 gsheet 创建一个跟踪器,以提高我们的日常工作效率。我正在使用 A 到 J 列并将其冻结到 J。从 K 到 Z 这些是我想用来为我们的时间戳制作按钮的列和行,例如休息、午餐、培训等。我创建了一个按钮开始和结束并带有数据验证的下拉菜单,他们可以在其中选择休息、午餐培训等当前活动,因为我使用从 A 到 J 的列和行进行日常生产。每当我点击开始按钮做一个时间戳让我们说休息时,它将时间戳到整个工作表中使用的最后一行。我不想从整个工作表的最后一行记录时间戳,我想将时间戳记录到特定列和从 K 到 Z 列的行。有人可以帮我编写脚本吗?

【问题讨论】:

【参考方案1】:

如果您想使用您的代码(无需用户输入)在特定行和列上放置时间戳,您可以使用 Sheet.getRange(row, column) 为特定行和列索引选择单元格范围。


如果您想通过用户输入在特定单元格上设置时间戳,以下选项将要求用户指定应添加时间戳的单元格。

选项 1:使用 Prompt Dialogs 获取要输入时间戳的单元格的 a1Notation

示例代码:

function insertTimeStamp_dialog()

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");

  //Get specific cell using prompt dialog
  var ui = SpreadsheetApp.getUi();
  var result = ui.prompt(
      'Insert Timestamp',
      'Please enter the cell(a1Notation) where you want to add the timestamp:',
      ui.ButtonSet.OK_CANCEL);
  
  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) 
    // User clicked "OK".
    Logger.log(text);
    
    try
      var cell = sheet.getRange(text);
      var date = new Date();
      cell.setValue(date.toDateString());

    catch(e)
      ui.alert('Invalid input range');
    
    
   else if (button == ui.Button.CANCEL) 
    // User clicked "Cancel".
    ui.alert('Request canceled');
   else if (button == ui.Button.CLOSE) 
    // User clicked X in the title bar.
    ui.alert('You closed the dialog.');
  

样本输出:

它有什么作用?

    它会创建一个对话框提示,询问用户应该在 a1Notation 中的特定单元格 使用Sheet.getRange(a1Notation)获取指定单元格的范围 使用Range.setValue()设置范围值

选项 2:使用 Range.getValue() 从工作表中的特定单元格获取要输入时间戳的单元格的 a1Notation

示例代码:

function insertTimeStamp_cell()

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
  var ui = SpreadsheetApp.getUi();
  var targetCell = sheet.getRange("A5").getValue();
  try
      var cell = sheet.getRange(targetCell);
      var date = new Date();
      cell.setValue(date.toDateString());

    catch(e)
      ui.alert('Invalid input range');
  
  

样本输出:

它有什么作用?

    使用Range.getValue() 从指定单元格(硬编码/固定单元格)获取 a1Notation。在此示例中,我指定应从单元格“A5”读取输入 使用Sheet.getRange(a1Notation)获取指定单元格的范围 使用Range.setValue()设置范围的值

您可能还想在成功添加时间戳后清除单元格“A5”中的值,这样它就不会被无意覆盖。你可以使用Range.clear()

【讨论】:

嗨,Ron,非常感谢您为我的查询付出的时间和精力。这是我要创建的输出。 很高兴听到这个消息。如果您认为这很有用,您可以接受/赞成答案作为对其他用户的参考。谢谢

以上是关于在 gsheet 中的特定列和行上添加时间戳并冻结列的主要内容,如果未能解决你的问题,请参考以下文章

基于Spark Scala中的条件转置Dataframe中的特定列和行

以编程方式将列和行添加到 WPF Datagrid

在 DataGridView c# 中添加列和行

CSS 表格 - 添加边距列和行边框底部

在R中同时移动矩阵的特定列和行的有效方法

从 PySpark 中的选定列和行中提取值