我有如下代码,如果'delete'在该行的第4个单元格中,则当前删除整行。是否可以删除左侧的3个单元格以及我写入“删除”的单元格而不是整行(我在单元格B16中有其他内容,例如我不想删除?
我无法找到.deleteCell函数。还有另一种方法吗?
function deleteRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[4] == 'delete') { // This searches all cells in columns A (change to row[1] for columns B and so on) and deletes row if cell is empty or has value 'delete'.
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
};
答案 0 :(得分:0)
所以问题是:
如何将给定单元格下方的所有单元格向上移动一行(覆盖给定的单元格值)?
执行此操作的代码是:
function deleteCell(sheet, cellx, celly){
var wholeSheet = SpreadsheetApp.openById(sheet).getRange("A1:F").getValues();
for(var i = celly; i<wholeSheet.length; i++){
wholeSheet[cellx][i] = wholeSheet[cellx][i+1];
}
SpreadsheetApp.openById(sheet).setValues(wholeSheet);
}
答案 1 :(得分:0)
这将删除单元格并根据移位参数向上或向左移动数据。
function delCellAndShift(row,column,shift)
{
if(row && column)
{
var shift=(typeof(shift)!='undefined')?shift:'left';
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange()
var vA=rg.getValues();
if(shift=='left')
{
var tA=vA[row-1];
tA.splice(column-1,1);
tA.push('');
vA[row-1]=tA;
rg.setValues(vA);
}
if(shift=='up')
{
var vB=Object.keys(vA[0]).map(function (c) { return vA.map(function (r) { return r[c]; }); });
var tA=vB[column-1];
tA.splice(row-1,1);
tA.push('');
vB[column-1]=tA;
vA=Object.keys(vB[0]).map(function (c) { return vB.map(function (r) { return r[c]; }); });
rg.setValues(vA);
}
}
else
{
var s='Invalid Inputs for delCellAndShift.<br /><input type="button" value="Close" onClick="google.script.host.close();" />';
var ui=HtmlService.createHtmlOutput(s);
SpreadsheetApp.getUi().showModalDialog(us, 'Invalid Inputs')
}
}
我使用以下函数测试它来设置我的数据并运行main函数。
function testDelCell()
{
delCellAndShift(3,7,'up');
}
function testsetupfordelcell()
{
var rs=10;
var cs=10;
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(1,1,rs,cs);
var vA=rg.getValues();
for(var i=0;i<rs;i++)
{
for(var j=0;j<cs;j++)
{
vA[i][j]=Utilities.formatString('%s,%s',i,j)
}
}
rg.setValues(vA);
}
这是左移的样本:
这是一个向上移动的样本: