Google apps script 在Google Sheets中归档行时如何添加新行
我目前在我的谷歌工作表中有工作代码。当在下拉菜单中标记为“存档”时,代码将工作表中的某些行移到另一个工作表上 我的问题是,当这种情况发生时,整行都会被删除。我只需要归档C:O列(C2:O)中的信息。这会产生另一个问题,当它删除该行时,其他行会向上移动,从而删除我为输入创建的设置数量的行 我需要它自动将归档行替换为另一行,该行具有所有相同的条件格式和功能,这样它就不会中断工作表的其余部分,也不需要进入并手动创建更多行 请帮忙,非常感谢 谷歌应用程序脚本中使用的当前代码附在下面Google apps script 在Google Sheets中归档行时如何添加新行,google-apps-script,google-sheets,archive,Google Apps Script,Google Sheets,Archive,我目前在我的谷歌工作表中有工作代码。当在下拉菜单中标记为“存档”时,代码将工作表中的某些行移到另一个工作表上 我的问题是,当这种情况发生时,整行都会被删除。我只需要归档C:O列(C2:O)中的信息。这会产生另一个问题,当它删除该行时,其他行会向上移动,从而删除我为输入创建的设置数量的行 我需要它自动将归档行替换为另一行,该行具有所有相同的条件格式和功能,这样它就不会中断工作表的其余部分,也不需要进入并手动创建更多行 请帮忙,非常感谢 谷歌应用程序脚本中使用的当前代码附在下面 function m
function myFunction() {
// moves a row from a sheet to another when a magic value is entered in a column
// adjust the following variables to fit your needs
// see https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var sheetNameToWatch = 'Campaigns';
var columnNumberToWatch = 6;
// column A = 1, B = 2, etc…
var valueToWatch = 'Archive';
var sheetNameToMoveTheRowTo = 'Archive';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
如果要在不删除行的情况下清除值,则需要通过以下方式更改方法:
- 获取包含要存档的数据的范围
- 要填充归档表,请使用
而不是copyTo()
moveTo()
- 获取仅包含要清除的单元格的范围
- 用于清除该范围
var SOURCE_SHEET_NAME = 'Campaigns';
var TARGET_SHEET_NAME = 'Archive Campaigns';
// The cell value that will trigger the archiving action.
var ARCHIVE_VALUE = 'Archive';
// The column number where you expect the ARCHIVE_VALUE to appear.
var ARCHIVE_COLUMN_NUMBER = 4;
// The starting and ending columns for the range of cells to archive.
var ARCHIVE_START_COLUMN = 1;
var ARCHIVE_END_COLUMN = 15;
// The starting and ending columns for the range of cells to clear.
var CLEAR_START_COLUMN = 1;
var CLEAR_END_COLUMN = 10;
function archiveRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var activeCellRange = sheet.getActiveCell();
if (sheet.getName() != SHEET_NAME ||
activeCellRange.getColumn() != ARCHIVE_COLUMN_NUMBER ||
activeCellRange.getValue() != ARCHIVE_VALUE) {
return;
}
var activeCellRow = activeCellRange.getRow();
// Get the range for the data to archive.
var archiveNumColumns = ARCHIVE_END_COLUMN - ARCHIVE_START_COLUMN + 1;
var archiveRowRange = sheet.getRange(activeCellRow, ARCHIVE_START_COLUMN, 1, archiveNumColumns)
// Get the range for the archive destination.
var targetSheet = ss.getSheetByName(TARGET_SHEET_NAME);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, archiveNumColumns);
// Copy the data to the target range.
archiveRowRange.copyTo(targetRange);
// Get the range for the data to clear.
var clearNumColumns = CLEAR_END_COLUMN - CLEAR_START_COLUMN + 1;
var clearRowRange = sheet.getRange(activeCellRow, CLEAR_START_COLUMN, 1, clearNumColumns);
// Clear the row.
clearRowRange.clearContent();
}
您只需要使用copyTo()[1]函数,而不需要使用moveTo()[2]函数来剪切和粘贴源行。此外,如果您只想保留具有相同格式和函数集的行单元格,则需要删除deleteRow函数。您只需更改以下内容:
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
为此:
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange);
此外,如果只想将值而不是公式从单元格复制到目标工作表,请使用copyTo函数和选项[3],如下所示:
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
[1]
[2]
[3] 这是一个可查看的工作表链接,您的链接不是公开的。谢谢。只是改变了它太棒了,所以它起作用了谢谢你,楚克斯。但是现在我怎么才能让它只拉柱C:O?我不希望它中断或从列A或B中提取信息。如果要存档/清除行的子集,请适当更改调用。我已经更新了代码片段,从第3列(又名C列)开始。为了更简单地执行此操作,请使用。我在下面添加了一个全新的答案。我没有意识到@符号不会在帖子中抓住你的用户名。仅供参考,在跟进你的问题时,你应该编辑问题,而不是提交答案。谢谢你Andres Duarte