从列中收集值,清除列并将这些值复制到另一列

Collect values from a column, clear the column and copy those values to another column

清除后的A列:

A
a
b
c
d

我需要在清除该列之前从该列中获取值,但我只能在清除后复制这些值:

function lista_de_episodios_rc() {
  var page = 'copy';
  const ss = SpreadsheetApp.getActive().getSheetByName(page);
  
  var history = ss.getRange(page + '!A1:A');

  var to_del = 'A1:A'
  ss.getRange(to_del + ss.getMaxRows()).clear({contentsOnly: true, skipFilteredRows: true});

  history.copyTo(ss.getRange(page + '!C1'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

在这次尝试中,C 列保持为空。

有没有办法存储这些值以供清理后使用?

有很多方法可以做到这一点。这是一个相当手动但有效的方法:

您可以使用 getValues()setValues() 从源列中获取值并将其设置到目标列中。

function move() {
  Logger.log("Starting script...")

  const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // Range for 4 values in the first column
  const sourceColumn = ss.getRange(1, 1, 4, 1);
  // Range for 4 values in the second column 
  const targetColumn = ss.getRange(1, 2, 4, 1);

  // get values from source 
  const col1Content = sourceColumn.getValues();
  // clear the source column
  sourceColumn.clear();
  // now set the target values
  targetColumn.setValues(col1Content);

  Logger.log("Done.")
}

输入

A B
a
b
c
d

输出

A B
a
b
c
d

对于其他方法,我建议您查看 documentation for Range class,其中描述了许多可用于移动内容的其他方法。还有不同版本的 copy()clear() 允许您指定是否要保留格式、数据验证等。

这是一个获取列中所有值并将它们移动到另一列的函数:

function lista_de_episodios_rc() {

  const fromCol = `A`
  const toCol = `C`

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(`copy`)
  const range = sheet.getRange(`${fromCol}:${fromCol}`)
  const values = range.getValues().filter(cell => cell !== ``)
  
  range.clearContent()
  sheet.getRange(`${toCol}1:${toCol}${values.length+1}`).setValues(values)

}