Skip to content

Commit 960178a

Browse files
Merge pull request #76 from contributorpw/edits
Update sheets/reset_sheet_data
2 parents 54929c9 + 6a90360 commit 960178a

File tree

11 files changed

+185
-162
lines changed

11 files changed

+185
-162
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Filters samples
22

3-
![alt](./000.png)
3+
![alt](000.png)

snippets/sheets/reset_sheet_data/appsscript.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"dependencies": {
44
"libraries": []
55
},
6-
"exceptionLogging": "STACKDRIVER"
6+
"exceptionLogging": "STACKDRIVER",
7+
"runtimeVersion": "V8"
78
}

snippets/sheets/reset_sheet_data/index.js

Lines changed: 6 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,13 @@
11
/**
2-
* @file A snippet for .
3-
* Examples of the snippet {@link https://support.google.com/docs/thread/5809954?msgid=5809954}
2+
* @file A snippet for reset the sheet/sheets data to its original state
3+
* Samples for {@link https://support.google.com/docs/thread/5809954?msgid=5809954}
44
*/
55

6-
/**
7-
* Runs the snippet.
8-
* Removes rows by condition 'B:B=10'. Appends deleted rows to the 'Archive' sheet.
9-
*/
10-
function onOpen() {
11-
SpreadsheetApp.getUi()
12-
.createMenu('Reset sheet')
13-
.addItem(
14-
'Reset active sheet (ContactPrice example)',
15-
'userActionResetActiveSheetByRangesAddresses'
16-
)
17-
.addItem('Reset ranges', 'userActionResetRangesByRangesAddresses')
18-
.addItem(
19-
'Reset multiple sheets',
20-
'userActionResetMultipleSheetsByRangesAddresses'
21-
)
22-
.addItem(
23-
'Reset "GSM" columns',
24-
'userActionResetMultipleSheetsBySpecialColumns'
25-
)
26-
.addItem('Reset to a specific value', 'userActionResetToSpecificValue')
27-
.addItem('Make a copy before reset', 'userActionMakeCopyBeforeReset')
28-
.addToUi();
29-
}
30-
31-
/**
32-
* Clear specifing cells on the active sheet
33-
*/
34-
function userActionResetActiveSheetByRangesAddresses() {
35-
var sheet = SpreadsheetApp.getActiveSheet();
36-
if (sheet.getName() !== 'ContactPrice') {
37-
SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet');
38-
return;
39-
}
40-
var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19'];
41-
resetByRangesList_(sheet, rangesAddressesList);
42-
}
43-
44-
/**
45-
* Clear specifing ranges
46-
*/
47-
function userActionResetRangesByRangesAddresses() {
48-
var sheet = SpreadsheetApp.getActive().getSheetByName('Reset ranges example');
49-
sheet.activate();
50-
var rangesAddressesList = ['B5:B15', 'B19'];
51-
resetByRangesList_(sheet, rangesAddressesList);
52-
}
53-
54-
/**
55-
* Clear specifing sheets
56-
*/
57-
function userActionResetMultipleSheetsByRangesAddresses() {
58-
var sheetNames = [
59-
{ name: 'Sheet1', rangesAddressesList: ['B5:B15', 'B19'] },
60-
{ name: 'Sheet2', rangesAddressesList: ['A1:Z20'] },
61-
];
62-
sheetNames.forEach(function(sn) {
63-
var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name);
64-
if (sheet) {
65-
resetByRangesList_(sheet, sn.rangesAddressesList);
66-
}
67-
});
68-
}
69-
70-
/**
71-
* Clear specifing sheets by color
72-
*/
73-
function userActionResetMultipleSheetsByColor() {
74-
var fColor = '#fa7d00';
75-
var sheetNames = [
76-
// { name: 'Sheet1' },
77-
{ name: 'Reset by color (click the image)' },
78-
];
79-
sheetNames.forEach(function(sn) {
80-
var sheet = SpreadsheetApp.getActive().getSheetByName(sn.name);
81-
if (sheet) {
82-
var rangesAddressesList = sheet
83-
.getDataRange()
84-
.getFontColors()
85-
.reduce(function(p, row, i) {
86-
var colors = row.reduce(function(p2, color, j) {
87-
if (color === fColor)
88-
p2.push(Utilities.formatString('R%sC%s', i + 1, j + 1));
89-
return p2;
90-
}, []);
91-
if (colors.length) p = p.concat(colors);
92-
return p;
93-
}, []);
94-
if (rangesAddressesList.length)
95-
resetByRangesList_(sheet, rangesAddressesList);
96-
}
97-
});
98-
}
99-
100-
/**
101-
* Cleaning the sheet and special columns
102-
*/
103-
function userActionResetMultipleSheetsBySpecialColumns() {
104-
SpreadsheetApp.getActive()
105-
.getSheets()
106-
.forEach(function(sheet) {
107-
var lastRow = sheet.getLastRow();
108-
var rangesAddressesList = sheet
109-
.getRange('2:2')
110-
.getValues()[0]
111-
.reduce(function(p, cell, i) {
112-
if (cell === 'GSA')
113-
p.push(
114-
Utilities.formatString('R3C%s:R%sC%s', i + 1, lastRow, i + 1)
115-
);
116-
return p;
117-
}, []);
118-
if (rangesAddressesList.length) {
119-
sheet.activate(); // Please remove this
120-
resetByRangesList_(sheet, rangesAddressesList);
121-
}
122-
});
123-
}
124-
125-
/**
126-
* Reset to specific values
127-
*/
128-
function userActionResetToSpecificValue() {
129-
var sheet = SpreadsheetApp.getActiveSheet();
130-
if (sheet.getName() !== 'ContactPrice') {
131-
SpreadsheetApp.getActive().toast('Please, activate "ContactPrice" sheet');
132-
return;
133-
}
134-
var rangesAddressesList = ['B5', 'B7', 'B9', 'B11', 'B15', 'B19'];
135-
resetByRangesListToValue_(sheet, rangesAddressesList, 'CLEARED');
136-
}
137-
1386
/**
1397
* Clear the sheet by the range list
1408
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet The sheet
141-
* @param {Array.<string>} rangesAddressesList The list of ranges to return, as specified in A1 notation or R1C1 notation.
9+
* @param {Array.<string>} rangesAddressesList The list of ranges to return,
10+
* as specified in A1 notation or R1C1 notation.
14211
*/
14312
function resetByRangesList_(sheet, rangesAddressesList) {
14413
sheet.getRangeList(rangesAddressesList).clearContent();
@@ -147,7 +16,8 @@ function resetByRangesList_(sheet, rangesAddressesList) {
14716
/**
14817
* Reset the sheet by the range list to a value
14918
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet The sheet
150-
* @param {Array.<string>} rangesAddressesList The list of ranges to return, as specified in A1 notation or R1C1 notation.
19+
* @param {Array.<string>} rangesAddressesList The list of ranges to return,
20+
* as specified in A1 notation or R1C1 notation.
15121
*/
15222
function resetByRangesListToValue_(sheet, rangesAddressesList, value) {
15323
value = value || '';

snippets/sheets/reset_sheet_data/userActions/makeCopyBeforeReset.js renamed to snippets/sheets/reset_sheet_data/makeCopyBeforeReset.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
/* global resetByRangesList_ */
22

33
/**
4-
*
4+
* The user action
55
*/
66
function userActionMakeCopyBeforeReset() {
77
// Don't copy this part. It's just for sample === START
88
const __checkvar__ = 'Make copy before reset';
99
if (SpreadsheetApp.getActiveSheet().getName() !== __checkvar__) {
10-
SpreadsheetApp.getActive()
11-
.getSheetByName(__checkvar__)
12-
.activate();
10+
SpreadsheetApp.getActive().getSheetByName(__checkvar__).activate();
1311
SpreadsheetApp.getUi().alert(
1412
'OK. The original sheet will activated. Please, fill data and try again!'
1513
);
Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,49 @@
11
---
2-
title: Reset sheets
3-
status: init
4-
url: snippets/spreadsheet_reset-sheets
2+
title: 'Reset a sheet'
3+
date: '2021-06-23'
4+
description: 'Resets the sheet/sheets data to its original state. Cleans the sheet(s)'
5+
tags: ['sheets']
6+
categories: ['snippets']
7+
images: ['./snippets/sheets/reset_sheet_data/screenshot.png']
58
---
69

7-
## Reset sheets
10+
## Resets the sheet/sheets data to its original state. Cleans the sheet(s)
811

9-
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)
12+
{{< toc >}}
1013

11-
[Sample sheet](https://docs.google.com/spreadsheets/d/1g8cCxofljFhq_J72sT5tvZZbeMTD5Wc8akHeXetCeDw/edit?usp=sharing)
14+
<video controls width="100%" height="350px" autoplay="true" loop="true">
15+
<source src="./screenrecord.mp4" type="video/mp4">
16+
Sorry, your browser doesn't support embedded videos.
17+
</video>
1218

13-
![Google Apps Script reset a sheet](https://raw.githubusercontent.com/contributorpw/google-apps-script-snippets/master/snippets/spreadsheet_reset-sheets/screenrecord.gif)
19+
### Snippet
20+
21+
- {{< externalLink >}}
22+
- {{< commentLink >}}
23+
- {{< scrvizLink >}}
24+
25+
{{< codeFromFile "index.js" >}}
26+
27+
### Run it
28+
29+
Copy the full sample of the Spreadsheet [Reset sheet data](https://docs.google.com/spreadsheets/d/1g8cCxofljFhq_J72sT5tvZZbeMTD5Wc8akHeXetCeDw/edit?usp=sharing).
30+
31+
You have to decide how you want to reset your sheet. This is expressed in individual user actions.
32+
33+
{{< codeFromFile "userActions.js" >}}
34+
35+
### Additional
36+
37+
{{< codeFromFile "triggerActions.js" >}}
38+
39+
#### Make copy before reset
40+
41+
<video controls width="100%" height="350px" autoplay="true" loop="true">
42+
<source src="./screenrecord2.mp4" type="video/mp4">
43+
Sorry, your browser doesn't support embedded videos.
44+
</video>
45+
46+
47+
{{< codeFromFile "makeCopyBeforeReset.js" >}}
48+
49+
{{< clipboard >}}

snippets/sheets/reset_sheet_data/readme.ru.md

Lines changed: 0 additions & 13 deletions
This file was deleted.
-2.97 MB
Binary file not shown.
-1.76 MB
Binary file not shown.
48.2 KB
Loading
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Creates the user menu for handy use.
3+
*/
4+
function onOpen() {
5+
SpreadsheetApp.getUi()
6+
.createMenu('Reset sheet')
7+
.addItem(
8+
'Reset active sheet (ContactPrice example)',
9+
'userActionResetActiveSheetByRangesAddresses'
10+
)
11+
.addItem('Reset ranges', 'userActionResetRangesByRangesAddresses')
12+
.addItem(
13+
'Reset multiple sheets',
14+
'userActionResetMultipleSheetsByRangesAddresses'
15+
)
16+
.addItem(
17+
'Reset "GSM" columns',
18+
'userActionResetMultipleSheetsBySpecialColumns'
19+
)
20+
.addItem('Reset to a specific value', 'userActionResetToSpecificValue')
21+
.addItem('Make a copy before reset', 'userActionMakeCopyBeforeReset')
22+
.addToUi();
23+
}

0 commit comments

Comments
 (0)