Code to track the changes made to a specific cell in Google Sheets

I am currently collaborating on a file with multiple individuals and I would like to create a script that can identify the person who last modified a specific cell, along with the timestamp of when the modification occurred. All I need is the email address of the user who made the most recent change and the corresponding time stamp example here,

So far, I have managed to retrieve the email address of the user but I am unable to capture the timestamp.

function history_version() { 
  var thisSS = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet1 = thisSS.getSheetByName('Data'); 
  var specialCell = sheet1.getRange("A1:A5"); 
  Logger.log(htmlEmail = "Cell " + specialCell.getA1Notation() +  " edited by " + Session.getActiveUser().getEmail())

}

Thank you for your assistance!

Answer №1

Solution:

If you want to capture the date and time when an edit is made in Google Sheets using an onEdit trigger, here's a code snippet that can help:

function onEdit() {
  var thisSS = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = thisSS.getSheetByName('Data');
  var specialCell = sheet1.getRange("A1:A5");
  var now = new Date();
  Logger.log("Edited by " + Session.getEffectiveUser().getEmail() + " at " + now);
}

Please Note:

I utilized getEffectiveUser instead of getActiveUser since the former may not be available in certain contexts (simple triggers). Another approach would be to install the trigger for accessing services requiring authorization.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Renew the php blade foreach loop using jQuery to update data live

I have a foreach cycle in my HTML, and at one point, some data is posted from JavaScript. I would like to append it once it is added to the database. I need to find a way to refresh the foreach loop without reloading the entire page (I could simply use ap ...

Enhancing User Experience with AJAX Page Loading and Progress Tracker

I'm looking to create a jQuery AJAX page load with a progress bar displayed at the top. I came across a helpful example of what I have in mind here. Any tips on how to get started would be greatly appreciated. This will be implemented on a WordPress ...

How do I reduce the size of a WinJS image file

Can anyone help me figure out how to retrieve the size (in pixels, bytes) of a picture in a Windows 8 app? I'm using openPicker to select the file but can't seem to find the size attributes. I want to display an error message if the file is too ...

Implement a function to delete an item from an array within a React object by utilizing the UseState hook

I am facing a challenge in React as I attempt to remove an element from an array within an array of objects using the UseState hook. Despite my efforts, the interface does not re-render and the object remains in place. From what I understand, in order for ...

Creating responsive images in a navbar with HTML and CSS

I need help with this code snippet: <div> <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container"> <div class="d-flex flex-row justify-content-center align-items-center"> <a cla ...

What could be causing the hover style to not take effect on the leaf nodes in jQuery Treeview?

Upon reviewing Sample 1 on this specific page, you may notice that the text turns red when hovering over the folder entries, but not for the leaf entries. My goal is to have the styling for the leaf entries mimic the behavior of the folder entries. Each b ...

Tips for extracting data from a state-based object store in React?

https://i.sstatic.net/A0cc4.pngWhenever I attempt to execute a PUT call, I fetch the data by id and save it in a state named "getData". While I am able to filter and map over this data, I face issues when trying to extract individual values. For instance, ...

Having trouble converting the file to binary format in order to send it to the wit.ai api through node.js

I am having trouble converting an Audio file to Binary format for sending it to the Wit.AI API. The node.js platform is being used for this purpose. On the front-end, user voice is recorded using the Mic-recorder Module. Any guidance or suggestions would b ...

Exploring ways to access an element's background color through JavaScript

Is there a way to access an element's CSS properties that are set by a class name in JavaScript? In the case of the first div element, I have applied a "red" class which sets its background color to red. However, when I try to access the div's b ...

Utilize PHP to transform JSON data into JavaScript

Hello, I am a newcomer to Stackoverflow and I need some assistance. My issue involves converting JSON with PHP to JavaScript. I am using PHP to fetch data from a database and create JSON, which I then want to convert for use in JavaScript as an object (obj ...

How to retrieve email input using SweetAlert2 in PHP?

Hello there! I'm curious about the most effective method for integrating PHP with Javascript. My goal is to execute some coding tasks once an email address has been entered. swal({ type: "success", title: "Congrats!", text: "Please enter your P ...

Using TypeScript to call Node.js functions instead of the standard way

Can someone assist me with the issue I'm facing? I have developed a default node.js app with express using Visual Studio nodejs tools, and now I am attempting to call the setTimeout function that is declared in node.d.ts. The code snippet in question ...

Challenges with pjax/ajax and handling the browser's back button

I've implemented pjax to ajaxify my menu links, which works well until I encounter an issue with the browser back button. In my JavaScript file, I have both Common Script files (to load all necessary js files when the user hits the URL) and Script fil ...

What is the best way to create a function that shifts a musical note up or down by one semitone?

Currently developing a guitar tuning tool and facing some hurdles. Striving to create a function that can take a musical note, an octave, and a direction (up or down), then produce a transposed note by a half step based on the traditional piano layout (i. ...

Using Node.js and Express with MySQL to store documents (outcomes)

I recently developed an Express App using Node.js Express v4.16.2 MySQL v2.15.0 In my app, I have configured MySQL as a Document Store Columns id: integer value: JSON When querying the MySQL Database with mysql, I receive the following result: Ro ...

Filtering a user list array in JavaScript based on tags using regular expressions

I have a user list array that needs to be filtered by tags. I attempted to filter the array using the filter and match methods with a RegExp for matching the tag, but the results were not as expected. let users=[{id:1,name:'john',tags:' ...

Dynamically load highcharts with a dynamic configuration setting

I am currently utilizing highcharts and dynamically loading them using ng-repeat. <div ng-repeat="(key,value) in chartCheckboxes track by $index"> <div class="card" id="{{key}}"> <div class="card-body" id="{{key}}"> ...

Selenium and Python: Dealing with the ElementNotInteractableException when trying to input a value in a td element

My attempt to input the number 1 into the MasterPack boxes in this table is met with an error indicating that it is not interactable. https://i.sstatic.net/J79p6.png I encountered the "element not interactable" error while using the following code: driver ...

The functionality of alpine.js x-for update is not functioning as intended

I have implemented a basic x-for loop on data from the Alpine Store (need it to be global). My objective is to modify a specific row after the table has been rendered by the x-for. Codepen: https://codepen.io/roniwashere/pen/oNMgGyy <div x-data> ...

Verifying the URL to determine if it includes the specific string needed to modify the Jade theme in

I am currently exploring ways to check if a URL string is present in an express application, in order to initiate a theme change. At the moment, I have a basic router.get function: router.get('/', function(req, res, next) { res.render(' ...