Google 表格复制粘贴列格式和公式到新创建的列

GoogleSheets CopyPaste Column's formatting and formula to newly created Column

我有一个 Google Sheet 和一个带有按钮的 sheet [Summary],单击该按钮时,会执行宏以将新列添加到不同的 sheet、[May 2022],然后从按钮的原始 sheet 中获取一个值,将该值添加到新列的 _1 单元格中,并粘贴页面的原始栏目。它还在基础 sheet 中添加了一个新行,以记录特定名称,以创建一个不断增长的收集名称和匹配日期的列表。我的代码提示使用 Yes/No.

确认这一点

我想让这个宏将新 sheet 的 (C2:C) 范围内的整个列范围复制到 _1 单元格下新添加的列中,以便每个单元格的格式、条件格式和公式都添加到 (_2:_) 范围内。该过程应该是它创建一个新列,添加名称的值,然后在下面添加 (C2:C) 中的所有格式和公式,所有这些都在生成时添加到新列中。我不想要值 copy/pasted;它需要粘贴公式。

function Add_Patient_Button(){
// Display a dialog box with a message and "Yes" and "No" buttons. The user 
//can also close the
// dialog by clicking the close button in its title bar.
var ui = SpreadsheetApp.getUi();
var response = ui.alert(
 'Please confirm that you are about to add a new patient.', 
 ui.ButtonSet.YES_NO);

 // Process the user's response.
  if (response == ui.Button.YES) {
  Add_New_Patient_Column();
 }
 if (response == ui.Button.NO) {
 }
else {

 }
 } 


function Add_New_Patient_Column()
{
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('9:9').activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('A9').activate();
  spreadsheet.getRange('E3:F3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('C9').activate();
  spreadsheet.getCurrentCell().setValue('0');
  var ss = SpreadsheetApp.getActive();
  var date = ss.getSheetByName('Summary').getRange('E3').getDisplayValue();
  var namesSheet = ss.getSheetByName('May 2022')
  var names = namesSheet.getRange('C2:C').getValues().filter(function (r) {return r[0]})
  names.unshift([date])
  namesSheet.getRange(1, namesSheet.getLastColumn() +1, names.length, 1).setValues(names)
  var spreadsheet = SpreadsheetApp.getActive();
}

这是我的 sheet 的副本。 https://docs.google.com/spreadsheets/d/1GbdoAY24Y1AMuDsXbRdUnDx4RuPzSN4krl-qcaCwC5o/edit?usp=sharing

我需要在宏中更改什么才能实现此目的?

不确定我是否理解整个任务。我建议克隆 sheet 'May 2022' 上最后一个存在的列,并根据 sheet 'Summary'.[=14 的单元格 E3 中的名称更改其第一个单元格=]

如果函数 Add_New_Patient_Column() 如下所示,则可以完成:

function Add_New_Patient_Column() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('May 2022');
  var last_col = sheet.getLastColumn();
  var last_row = sheet.getLastRow();

  // add a new empty column
  sheet.insertColumnAfter(last_col);

  // copy all cells from the last column into the new column
  sheet.getRange(1,last_col, last_row, 1).copyTo(sheet.getRange(1,last_col+1));

  // change the header of the new column
  var src_sheet = ss.getSheetByName('Summary');
  var [name, date] = src_sheet.getRange('E3:F3').getValues().flat();
  sheet.getRange(1,last_col+1).setValue(name);

  // append a new row at the 'Summary' sheet
  var new_row = [name, date, 0, '???'];
  src_sheet.appendRow(new_row);
}

更新

如果要在第 9 行上方添加新行,则必须替换该行:

src_sheet.appendRow(new_row);

与:

src_sheet.insertRowBefore(9);
src_sheet.getRange('a9:d9').setValues([new_row]);