将光标设置到 insertRowBefore 之后的 Google 个工作表之后的正确位置
Set cursor to correct location after Google Sheets after insertRowBefore
我有以下 Google 表格功能:
function addRow() {
var destinationSheet = SpreadsheetApp.getActiveSheet();
var currentRow = destinationSheet.getActiveCell().getRow();
// Insert the row
destinationSheet.insertRowBefore(currentRow);
// Copy the source to destination (currentRow is the blank line)
var sourceRange = destinationSheet.getRange(currentRow + 1, 1, 1, destinationSheet.getLastColumn());
var targetRange = destinationSheet.getRange(currentRow - 0, 1, 2, destinationSheet.getLastColumn());
// Fill upwards
sourceRange.autoFill(targetRange, SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
SpreadsheetApp.getUi().alert(destinationSheet.getActiveCell().getRow());
};
它在当前行上方创建一个空白行,并将当前行复制到空白行中。这行得通。
光标(视觉上)结束在新行中。换句话说,视觉上,当我执行 insertRowBefore 时,光标停留在原处,下面的行向下移动。
但是,当我在没有事先移动光标的情况下键入单元格(第一列)时,它键入了光标所在的单元格,但是当我按下 Return 时,数据“跳转”到下面的单元格就像我一直在那里打字一样。就好像光标实际上在下面的行中并且 UI 不同步。然而,警报“告诉”我我在正确的行(空然后填充的行)。
有趣的是,如果我在 UI 中不移动光标而重新 运行 函数,我注意到活动行增加了 1。因此,我认为 UI 在函数完成后移动了光标,但未能以图形方式显示它。
我的问题是:我该怎么做:
- 获取 UI 以正确显示活动光标位置?或者,理想情况下
- 防止光标的这种“幕后”移动,使其保持在正确的单元格中(添加的行的第 1 列)。
Google Apps Script Spreadsheet Service 没有控制光标位置的方法,但可以设置活动单元格。
以下是众多方法中的一种:
function setCurrentCell(){
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('Sheet1');
const range = sheet.getRange('B2'); // This should be a single cell
range.activateAsCurrentCell();
}
另一种方法是在 Range 对象上使用 activate()
。当前单元格将是范围内左上角的单元格。
参考
- https://developers.google.com/apps-script/reference/spreadsheet/range#activateAsCurrentCell()
- https://developers.google.com/apps-script/reference/spreadsheet/range#activate
相关
我通过在函数末尾添加以下 3 行来修复它:
destinationSheet.getRange(currentRow - 1, 1, 1, destinationSheet.getLastColumn()).activate();
destinationSheet.getRange(currentRow, 1, 1, destinationSheet.getLastColumn()).activate();
destinationSheet.getRange(currentRow, 1).activate();
这是我设法让它工作的唯一方法。它:
- 激活前一行
- 激活当前行
- [可选]激活当前行的第一个单元格。
然后,当我在单元格中键入内容时,当我按下回车键时,它不会下拉一行。请注意,对于前两行额外代码,有必要 select 多于第一列 - 因此整行都是 select。因此,问题在前两行代码后得到解决。第三个只是修饰 select 仅行中的第一列。
我不知道为什么这行得通以及为什么其他变体行不通。
我有以下 Google 表格功能:
function addRow() {
var destinationSheet = SpreadsheetApp.getActiveSheet();
var currentRow = destinationSheet.getActiveCell().getRow();
// Insert the row
destinationSheet.insertRowBefore(currentRow);
// Copy the source to destination (currentRow is the blank line)
var sourceRange = destinationSheet.getRange(currentRow + 1, 1, 1, destinationSheet.getLastColumn());
var targetRange = destinationSheet.getRange(currentRow - 0, 1, 2, destinationSheet.getLastColumn());
// Fill upwards
sourceRange.autoFill(targetRange, SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
SpreadsheetApp.getUi().alert(destinationSheet.getActiveCell().getRow());
};
它在当前行上方创建一个空白行,并将当前行复制到空白行中。这行得通。
光标(视觉上)结束在新行中。换句话说,视觉上,当我执行 insertRowBefore 时,光标停留在原处,下面的行向下移动。
但是,当我在没有事先移动光标的情况下键入单元格(第一列)时,它键入了光标所在的单元格,但是当我按下 Return 时,数据“跳转”到下面的单元格就像我一直在那里打字一样。就好像光标实际上在下面的行中并且 UI 不同步。然而,警报“告诉”我我在正确的行(空然后填充的行)。
有趣的是,如果我在 UI 中不移动光标而重新 运行 函数,我注意到活动行增加了 1。因此,我认为 UI 在函数完成后移动了光标,但未能以图形方式显示它。
我的问题是:我该怎么做:
- 获取 UI 以正确显示活动光标位置?或者,理想情况下
- 防止光标的这种“幕后”移动,使其保持在正确的单元格中(添加的行的第 1 列)。
Google Apps Script Spreadsheet Service 没有控制光标位置的方法,但可以设置活动单元格。 以下是众多方法中的一种:
function setCurrentCell(){
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('Sheet1');
const range = sheet.getRange('B2'); // This should be a single cell
range.activateAsCurrentCell();
}
另一种方法是在 Range 对象上使用 activate()
。当前单元格将是范围内左上角的单元格。
参考
- https://developers.google.com/apps-script/reference/spreadsheet/range#activateAsCurrentCell()
- https://developers.google.com/apps-script/reference/spreadsheet/range#activate
相关
我通过在函数末尾添加以下 3 行来修复它:
destinationSheet.getRange(currentRow - 1, 1, 1, destinationSheet.getLastColumn()).activate();
destinationSheet.getRange(currentRow, 1, 1, destinationSheet.getLastColumn()).activate();
destinationSheet.getRange(currentRow, 1).activate();
这是我设法让它工作的唯一方法。它:
- 激活前一行
- 激活当前行
- [可选]激活当前行的第一个单元格。
然后,当我在单元格中键入内容时,当我按下回车键时,它不会下拉一行。请注意,对于前两行额外代码,有必要 select 多于第一列 - 因此整行都是 select。因此,问题在前两行代码后得到解决。第三个只是修饰 select 仅行中的第一列。
我不知道为什么这行得通以及为什么其他变体行不通。