diff --git a/snippets/sheets/filters_samples/readme.md b/snippets/sheets/filters_samples/readme.md index 80e6061..67bccd1 100644 --- a/snippets/sheets/filters_samples/readme.md +++ b/snippets/sheets/filters_samples/readme.md @@ -1,3 +1,3 @@ # Filters samples -![alt](./000.png) \ No newline at end of file +![alt](000.png) \ No newline at end of file diff --git a/snippets/sheets/reset_sheet_data/appsscript.json b/snippets/sheets/reset_sheet_data/appsscript.json index f1f01e7..69e7032 100644 --- a/snippets/sheets/reset_sheet_data/appsscript.json +++ b/snippets/sheets/reset_sheet_data/appsscript.json @@ -3,5 +3,6 @@ "dependencies": { "libraries": [] }, - "exceptionLogging": "STACKDRIVER" + "exceptionLogging": "STACKDRIVER", + "runtimeVersion": "V8" } \ No newline at end of file diff --git a/snippets/sheets/reset_sheet_data/index.js b/snippets/sheets/reset_sheet_data/index.js index 3b31dd0..91ef651 100644 --- a/snippets/sheets/reset_sheet_data/index.js +++ b/snippets/sheets/reset_sheet_data/index.js @@ -1,144 +1,13 @@ /** - * @file A snippet for . - * Examples of the snippet {@link https://support.google.com/docs/thread/5809954?msgid=5809954} + * @file A snippet for reset the sheet/sheets data to its original state + * Samples for {@link https://support.google.com/docs/thread/5809954?msgid=5809954} */ -/** - * Runs the snippet. - * Removes rows by condition 'B:B=10'. Appends deleted rows to the 'Archive' sheet. - */ -function onOpen() { - SpreadsheetApp.getUi() - .createMenu('Reset sheet') - .addItem( - 'Reset active sheet (ContactPrice example)', - 'userActionResetActiveSheetByRangesAddresses' - ) - .addItem('Reset ranges', 'userActionResetRangesByRangesAddresses') - .addItem( - 'Reset multiple sheets', - 'userActionResetMultipleSheetsByRangesAddresses' - ) - .addItem( - 'Reset "GSM" columns', - 'userActionResetMultipleSheetsBySpecialColumns' - ) - .addItem('Reset to a specific value', 'userActionResetToSpecificValue') - .addItem('Make a copy before reset', 'userActionMakeCopyBeforeReset') - .addToUi(); -} - -/** - * Clear specifing cells on the active sheet - */ -function userActionResetActiveSheetByRangesAddresses() { - var sheet = SpreadsheetApp.getActiveSheet(); - if (sheet.getName() !== 'ContactPrice') { - SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet'); - return; - } - var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19']; - resetByRangesList_(sheet, rangesAddressesList); -} - -/** - * Clear specifing ranges - */ -function userActionResetRangesByRangesAddresses() { - var sheet = SpreadsheetApp.getActive().getSheetByName('Reset ranges example'); - sheet.activate(); - var rangesAddressesList = ['B5:B15', 'B19']; - resetByRangesList_(sheet, rangesAddressesList); -} - -/** - * Clear specifing sheets - */ -function userActionResetMultipleSheetsByRangesAddresses() { - var sheetNames = [ - { name: 'Sheet1', rangesAddressesList: ['B5:B15', 'B19'] }, - { name: 'Sheet2', rangesAddressesList: ['A1:Z20'] }, - ]; - sheetNames.forEach(function(sn) { - var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name); - if (sheet) { - resetByRangesList_(sheet, sn.rangesAddressesList); - } - }); -} - -/** - * Clear specifing sheets by color - */ -function userActionResetMultipleSheetsByColor() { - var fColor = '#fa7d00'; - var sheetNames = [ - // { name: 'Sheet1' }, - { name: 'Reset by color (click the image)' }, - ]; - sheetNames.forEach(function(sn) { - var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name); - if (sheet) { - var rangesAddressesList = sheet - .getDataRange() - .getFontColors() - .reduce(function(p, row, i) { - var colors = row.reduce(function(p2, color, j) { - if (color === fColor) - p2.push(Utilities.formatString('R%sC%s', i + 1, j + 1)); - return p2; - }, []); - if (colors.length) p = p.concat(colors); - return p; - }, []); - if (rangesAddressesList.length) - resetByRangesList_(sheet, rangesAddressesList); - } - }); -} - -/** - * Cleaning the sheet and special columns - */ -function userActionResetMultipleSheetsBySpecialColumns() { - SpreadsheetApp.getActive() - .getSheets() - .forEach(function(sheet) { - var lastRow = sheet.getLastRow(); - var rangesAddressesList = sheet - .getRange('2:2') - .getValues()[0] - .reduce(function(p, cell, i) { - if (cell === 'GSA') - p.push( - Utilities.formatString('R3C%s:R%sC%s', i + 1, lastRow, i + 1) - ); - return p; - }, []); - if (rangesAddressesList.length) { - sheet.activate(); // Please remove this - resetByRangesList_(sheet, rangesAddressesList); - } - }); -} - -/** - * Reset to specific values - */ -function userActionResetToSpecificValue() { - var sheet = SpreadsheetApp.getActiveSheet(); - if (sheet.getName() !== 'ContactPrice') { - SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet'); - return; - } - var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19']; - resetByRangesListToValue_(sheet, rangesAddressesList, 'CLEARED'); -} - /** * Clear the sheet by the range list * @param {GoogleAppsScript.Spreadsheet.Sheet} sheet The sheet - * @param {Array.} rangesAddressesList The list of ranges to return, as specified in A1 notation or R1C1 notation. + * @param {Array.} rangesAddressesList The list of ranges to return, + * as specified in A1 notation or R1C1 notation. */ function resetByRangesList_(sheet, rangesAddressesList) { sheet.getRangeList(rangesAddressesList).clearContent(); @@ -147,7 +16,8 @@ function resetByRangesList_(sheet, rangesAddressesList) { /** * Reset the sheet by the range list to a value * @param {GoogleAppsScript.Spreadsheet.Sheet} sheet The sheet - * @param {Array.} rangesAddressesList The list of ranges to return, as specified in A1 notation or R1C1 notation. + * @param {Array.} rangesAddressesList The list of ranges to return, + * as specified in A1 notation or R1C1 notation. */ function resetByRangesListToValue_(sheet, rangesAddressesList, value) { value = value || ''; diff --git a/snippets/sheets/reset_sheet_data/userActions/makeCopyBeforeReset.js b/snippets/sheets/reset_sheet_data/makeCopyBeforeReset.js similarity index 91% rename from snippets/sheets/reset_sheet_data/userActions/makeCopyBeforeReset.js rename to snippets/sheets/reset_sheet_data/makeCopyBeforeReset.js index fb70a70..3dcd76b 100644 --- a/snippets/sheets/reset_sheet_data/userActions/makeCopyBeforeReset.js +++ b/snippets/sheets/reset_sheet_data/makeCopyBeforeReset.js @@ -1,15 +1,13 @@ /* global resetByRangesList_ */ /** - * + * The user action */ function userActionMakeCopyBeforeReset() { // Don't copy this part. It's just for sample === START const __checkvar__ = 'Make copy before reset'; if (SpreadsheetApp.getActiveSheet().getName() !== __checkvar__) { - SpreadsheetApp.getActive() - .getSheetByName(__checkvar__) - .activate(); + SpreadsheetApp.getActive().getSheetByName(__checkvar__).activate(); SpreadsheetApp.getUi().alert( 'OK. The original sheet will activated. Please, fill data and try again!' ); diff --git a/snippets/sheets/reset_sheet_data/readme.md b/snippets/sheets/reset_sheet_data/readme.md index cb15c7e..fa05e68 100644 --- a/snippets/sheets/reset_sheet_data/readme.md +++ b/snippets/sheets/reset_sheet_data/readme.md @@ -1,13 +1,49 @@ --- -title: Reset sheets -status: init -url: snippets/spreadsheet_reset-sheets +title: 'Reset a sheet' +date: '2021-06-23' +description: 'Resets the sheet/sheets data to its original state. Cleans the sheet(s)' +tags: ['sheets'] +categories: ['snippets'] +images: ['./snippets/sheets/reset_sheet_data/screenshot.png'] --- -## Reset sheets +## Resets the sheet/sheets data to its original state. Cleans the sheet(s) -Based on [I need a script to clear certain cells in sheets when a button is pressed](https://support.google.com/docs/thread/5809954?msgid=5809954) +{{< toc >}} -[Sample sheet](https://docs.google.com/spreadsheets/d/1g8cCxofljFhq_J72sT5tvZZbeMTD5Wc8akHeXetCeDw/edit?usp=sharing) + -![Google Apps Script reset a sheet](https://raw.githubusercontent.com/contributorpw/google-apps-script-snippets/master/snippets/spreadsheet_reset-sheets/screenrecord.gif) +### Snippet + +- {{< externalLink >}} +- {{< commentLink >}} +- {{< scrvizLink >}} + +{{< codeFromFile "index.js" >}} + +### Run it + +Copy the full sample of the Spreadsheet [Reset sheet data](https://docs.google.com/spreadsheets/d/1g8cCxofljFhq_J72sT5tvZZbeMTD5Wc8akHeXetCeDw/edit?usp=sharing). + +You have to decide how you want to reset your sheet. This is expressed in individual user actions. + +{{< codeFromFile "userActions.js" >}} + +### Additional + +{{< codeFromFile "triggerActions.js" >}} + +#### Make copy before reset + + + + +{{< codeFromFile "makeCopyBeforeReset.js" >}} + +{{< clipboard >}} diff --git a/snippets/sheets/reset_sheet_data/readme.ru.md b/snippets/sheets/reset_sheet_data/readme.ru.md deleted file mode 100644 index e922e46..0000000 --- a/snippets/sheets/reset_sheet_data/readme.ru.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Сброс листа -status: init -url: snippets/spreadsheet_reset-sheets ---- - -## Reset sheets - -Основано на [I need a script to clear certain cells in sheets when a button is pressed](https://support.google.com/docs/thread/5809954?msgid=5809954) - -[Таблица с примером](https://docs.google.com/spreadsheets/d/1g8cCxofljFhq_J72sT5tvZZbeMTD5Wc8akHeXetCeDw/edit?usp=sharing) - -![Google Apps Script reset a sheet](https://raw.githubusercontent.com/contributorpw/google-apps-script-snippets/master/snippets/spreadsheet_reset-sheets/screenrecord.gif) diff --git a/snippets/sheets/reset_sheet_data/screenrecord.gif b/snippets/sheets/reset_sheet_data/screenrecord.gif deleted file mode 100644 index c4bb557..0000000 Binary files a/snippets/sheets/reset_sheet_data/screenrecord.gif and /dev/null differ diff --git a/snippets/sheets/reset_sheet_data/screenrecord2.gif b/snippets/sheets/reset_sheet_data/screenrecord2.gif deleted file mode 100644 index ac24c87..0000000 Binary files a/snippets/sheets/reset_sheet_data/screenrecord2.gif and /dev/null differ diff --git a/snippets/sheets/reset_sheet_data/screenshot.png b/snippets/sheets/reset_sheet_data/screenshot.png new file mode 100644 index 0000000..df49511 Binary files /dev/null and b/snippets/sheets/reset_sheet_data/screenshot.png differ diff --git a/snippets/sheets/reset_sheet_data/triggerActions.js b/snippets/sheets/reset_sheet_data/triggerActions.js new file mode 100644 index 0000000..fa41e87 --- /dev/null +++ b/snippets/sheets/reset_sheet_data/triggerActions.js @@ -0,0 +1,23 @@ +/** + * Creates the user menu for handy use. + */ +function onOpen() { + SpreadsheetApp.getUi() + .createMenu('Reset sheet') + .addItem( + 'Reset active sheet (ContactPrice example)', + 'userActionResetActiveSheetByRangesAddresses' + ) + .addItem('Reset ranges', 'userActionResetRangesByRangesAddresses') + .addItem( + 'Reset multiple sheets', + 'userActionResetMultipleSheetsByRangesAddresses' + ) + .addItem( + 'Reset "GSM" columns', + 'userActionResetMultipleSheetsBySpecialColumns' + ) + .addItem('Reset to a specific value', 'userActionResetToSpecificValue') + .addItem('Make a copy before reset', 'userActionMakeCopyBeforeReset') + .addToUi(); +} diff --git a/snippets/sheets/reset_sheet_data/userActions.js b/snippets/sheets/reset_sheet_data/userActions.js new file mode 100644 index 0000000..8f8cb47 --- /dev/null +++ b/snippets/sheets/reset_sheet_data/userActions.js @@ -0,0 +1,108 @@ +/* global resetByRangesList_, resetByRangesListToValue_ */ + +/** + * Clear specifing cells on the active sheet + */ +function userActionResetActiveSheetByRangesAddresses() { + var sheet = SpreadsheetApp.getActiveSheet(); + if (sheet.getName() !== 'ContactPrice') { + SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet'); + return; + } + var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19']; + resetByRangesList_(sheet, rangesAddressesList); +} + +/** + * Clear specifing ranges + */ +function userActionResetRangesByRangesAddresses() { + var sheet = SpreadsheetApp.getActive().getSheetByName('Reset ranges example'); + sheet.activate(); + var rangesAddressesList = ['B5:B15', 'B19']; + resetByRangesList_(sheet, rangesAddressesList); +} + +/** + * Clear specifing sheets + */ +function userActionResetMultipleSheetsByRangesAddresses() { + var sheetNames = [ + { name: 'Sheet1', rangesAddressesList: ['B5:B15', 'B19'] }, + { name: 'Sheet2', rangesAddressesList: ['A1:Z20'] }, + ]; + sheetNames.forEach((sn) => { + var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name); + if (sheet) { + resetByRangesList_(sheet, sn.rangesAddressesList); + } + }); +} + +/** + * Clear specifing sheets by color + */ +function userActionResetMultipleSheetsByColor() { + var fColor = '#fa7d00'; + var sheetNames = [ + // { name: 'Sheet1' }, + { name: 'Reset by color (click the image)' }, + ]; + sheetNames.forEach((sn) => { + var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name); + if (sheet) { + var rangesAddressesList = sheet + .getDataRange() + .getFontColors() + .reduce((p, row, i) => { + var colors = row.reduce((p2, color, j) => { + if (color === fColor) + p2.push(Utilities.formatString('R%sC%s', i + 1, j + 1)); + return p2; + }, []); + if (colors.length) p = p.concat(colors); + return p; + }, []); + if (rangesAddressesList.length) + resetByRangesList_(sheet, rangesAddressesList); + } + }); +} + +/** + * Cleaning the sheet and special columns + */ +function userActionResetMultipleSheetsBySpecialColumns() { + SpreadsheetApp.getActive() + .getSheets() + .forEach((sheet) => { + var lastRow = sheet.getLastRow(); + var rangesAddressesList = sheet + .getRange('2:2') + .getValues()[0] + .reduce((p, cell, i) => { + if (cell === 'GSA') + p.push( + Utilities.formatString('R3C%s:R%sC%s', i + 1, lastRow, i + 1) + ); + return p; + }, []); + if (rangesAddressesList.length) { + sheet.activate(); // Please remove this + resetByRangesList_(sheet, rangesAddressesList); + } + }); +} + +/** + * Reset to specific values + */ +function userActionResetToSpecificValue() { + var sheet = SpreadsheetApp.getActiveSheet(); + if (sheet.getName() !== 'ContactPrice') { + SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet'); + return; + } + var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19']; + resetByRangesListToValue_(sheet, rangesAddressesList, 'CLEARED'); +}