Search code examples
google-apps-scriptgoogle-sheetsautomationscreenshot

screenshot of Google spreadsheet range


I'm trying to take a screenshot of a range of cells in Google spreadsheet every time a value changes in that range and save the screenshot in a URL or in my drive as .jpg, .png or pdf I was able to find something similar for taking screenshots of charts but wasn't able to modify the script successfully for this case, has anyone done something similar


Solution

  • Take this as a reference, modify if needed:

    Code:

    function exportPdf(e) {
      var spreadsheet = e.source;
      var sheet = spreadsheet.getActiveSheet();
      var range = e.range;
    
      // sample dimension to be checked is B2:E5
      var checkDimension = {
        startingRow: 2,
        startingColumn: 2,
        endingRow: 5,
        endingColumn: 5
      };
    
      // range should be within checkDimension and Sheet1
      if(sheet.getSheetName() == 'Sheet1' && 
        range.getRow() >= checkDimension.startingRow && 
        range.getLastRow() <= checkDimension.endingRow &&
        range.getColumn() >= checkDimension.startingColumn && 
        range.getLastColumn() <= checkDimension.endingColumn) {
          
        var spreadsheetId = spreadsheet.getId();
        var sheetId = sheet.getSheetId();
        var exportRange = "B2:E5";
        var urlString = 'export?exportFormat=pdf&format=pdf' +
          '&gid=' + sheetId + '&id=' + spreadsheetId +
          '&range=' + exportRange + 
          '&size=A4' +         // paper size
          '&portrait=true';   // orientation, false for landscape
        // See https://webapps.stackexchange.com/questions/130654/all-google-docs-url-parameters-functions-commands for more url parameters
        var exportUrl = spreadsheet.getUrl().replace(/edit.*$/, urlString);
    
        var options = {
          headers: {
            'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
          },
          muteHttpExceptions: true
        }
        var response = UrlFetchApp.fetch(exportUrl, options);
    
        if (response.getResponseCode() !== 200) {
          Logger.log("Error exporting Sheet to PDF!  Response Code: " + response.getResponseCode());
          return;
        }
    
        var blob = response.getBlob();
        var timestamp = new Date().toISOString();
        // set name to spreadsheet_sheet_range_timestamp.pdf
        blob.setName(spreadsheet.getName() + '_' + sheet.getSheetName() + '_' + exportRange + '_' + timestamp + '.pdf');
    
        var folderId = 'enter your folder ID here';
        // Create the PDF file in the specific folder
        DriveApp.getFolderById(folderId).createFile(blob); 
      }
    }
    

    Note:

    • For more url parameters, see reference below.
    • This needs to be an installable trigger, not a simple one.

    Output:

    output output2

    References: