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]);
我有一个 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]);