Here is my code:
var ct = 0;
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getCurrentCell();
var cellcol = cell.getColumn();
var cellrow = cell.getRow()
var notate = cell.getA1Notation();
var temp, letter = '';
var solved = new Array()
var pend = new Array()
var cellcol1 = cellcol + 1;
var p;
function copycell1() {
getFirstEmptyRowByColumnArray();
cell.copyTo(sheet.getRange(ct,cellcol,1,1))
cell.clearContent();
}
function getFirstEmptyRowByColumnArray() {
columnToLetter(cellcol)
var column = sheet.getRange(letter + ':' + letter);
var values = column.getValues();
while ( values[ct] && values[ct][0] !== "" ) {
ct++;
}
ct++
}
function getFirstEmptyRowByColumnArray2() {
columnToLetter(cellcol);
var cellrow = cell.getRow();
var column = sheet.getRange(letter + cellrow + ':' + letter);
var values = column.getValues();
while ( values[ct] && values[ct][0] !== "" ) {
ct++;
}
}
function columnToLetter(column)
{
while (column > 0)
{
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
function totalSolved() {
getFirstEmptyRowByColumnArray2()
var compacolumn = sheet.getRange(letter + cellrow + ':' + letter + (ct+cellrow));
var valuesSolved = compacolumn.getValues();
solved = valuesSolved
}
function totalPending() {
letter = '';
ct = 0;
cellcol = cellcol + 1;
getFirstEmptyRowByColumnArray2()
cellrow = cell.getRow();
var compacolumn = sheet.getRange(letter + cellrow + ':' + letter + (ct + cellrow));
var valuesPend = compacolumn.getValues();
pend = valuesPend
}
function compa() {
var i;
var o;
totalSolved();
totalPending();
for ( i = 0; i < pend.length; i++ ) {
for (o = 0; o < solved.length; o++) {
if (pend[i].toString() == solved[o].toString()) {
sheet.getRange(i+cellrow,cellcol1).clearContent();
}
else {
}
}
}
clearemp();
clearemp();
clearemp();
}
function clearemp() {
lastRowForColumn(cellcol1)
for (var i = 0; i < p; i++){
if((sheet.getRange(letter+(cellrow+i)).getValue()) == "")
{
Logger.log(sheet.getRange(letter+(cellrow+i)).getA1Notation());
sheet.getRange(letter+(cellrow+i)).deleteCells(SpreadsheetApp.Dimension.ROWS);
}
}
}
function lastRowForColumn(column){
var numRows = sheet.getLastRow();
Logger.log("numRows is " + numRows)
var data = sheet.getRange(1, column, numRows).getValues();
Logger.log("data is " + data)
Logger.log("data.length is " + data.length)
for(p = data.length - 1 ; p >= 0 ; p--){
if (data[p][0] != null && data[p][0] != ""){
Logger.log ("p is " + p)
return p + 1;
}
}
}
function test() {
Logger.log("cellcol is " + cellcol1)
lastRowForColumn(cellcol1)
Logger.log("p is " + p)
}
The function I'm talking about is compa()
.
The specific function that deletes the cells is clearemp()
. But whenever I do it it is still not complete and I am at a loss on what to do
CONTEXT: I am working on comparing two lists and then removing the equal cells on the 2nd column and then shifting the cells up.
function delcels(col=1) {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet1');
const rg=sh.getRange(1,col,sh.getLastRow());
const c1=rg.getValues().filter((e)=>!(e===""));//thanks to iansedano
rg.clearContent();
sh.getRange(1,col,c1.length,1).setValues(c1);
}
There are a few approaches, but here is one, that is essentially the same as Cooper's, except that it doesn't clear values that are 0
. Only if the cell is empty, ie ""
will it clear the cell.
/**
* Clears empty cells in column
*
* @param columnToClear - the column that should be cleared, defaults to 1
* @param sheetName - the name of the sheet, defaults to "Sheet1"
*/
function clearBlanks(columnToClear = 1, sheetName = "Sheet1") {
const file = SpreadsheetApp.getActive();
const sheet = file.getSheetByName(sheetName);
const range = sheet.getRange(1, columnToClear, sheet.getLastRow(), 1);
const output = range.getValues().filter(e => !(e[0] === ""));
range.clearContent();
const outputRange = sheet.getRange(1, columnToClear, output.length, 1)
outputRange.setValues(output)
}
filter
to take out any values that are strictly equal ===
to and empty string. So it will not clear 0
values.This is called on an array
array.filter(function)
You need to pass in a function that will return either a True
or False
value. The filter will go through each element and if it gets False
then it will remove that element. In the example above, its passed in as an arrow function. When its an arrow function, if its on one line, you don't need to include the return
statement.
There are a few useful functions that are like this. For example, forEach
and map
that can be very useful for the types of operation you are doing.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.