当前位置: 首页 > 知识库问答 >
问题:

难倒了。需要帮助将两个脚本应用于具有多个工作表的单个Google Sheets文档吗

苏培
2023-03-14

我对脚本编写非常陌生,已经搜索了您的大量论坛,但无法回答我自己的问题。我能够在一个单独的文件中找到适用于每个工作表的脚本,但是我可以将两个脚本应用于一个文件,但分别应用于两个工作表吗?基本上,我所追求的是:

我是一名飞行员,我在谷歌表格文件中记录我的航海日志和飞行时间。我已经使用这种方法很多年了,但最近尝试应用一些脚本来获取列A中的第一个空单元格,因为这是我从每个条目的日期开始的地方。主要原因是我的工作表现在有超过3000行的条目。我档案中记录航班的第一张纸名为“日志”。我找到了一个应用于onOpen的脚本,它将在每次打开时将光标放置到列A的第一个空行。下面是我使用的脚本。它可以工作,但需要大约10秒才能完成。如果有更快的方法,我愿意接受建议。我只想知道A列的第一个空单元格。这是我目前使用的:

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange("A:A").getValues();
  var maxIndex = values.reduce(function(maxIndex, row, index) {
    return row[0] === "" ? maxIndex : index;
  }, 0);
  sheet.setActiveRange(sheet.getRange(maxIndex + 2, 1));
}

第1页“日志”的屏幕截图

这个文件中的第二张纸的标题是“飞行任务”,在这张纸上,我希望同样的功能在打开时发生。我希望光标也放在A列的第一个空单元格中。同样,我在A列开头输入了给定航班值日期间的日期。如果我将此工作表拆分为一个独立的Google Sheets文件,则此脚本可以工作:

function onOpen(){
  var sheet = SpreadsheetApp.getActiveSheet();
  //Find the last cell with data in that specific column (A in this case)
  var lastCell = sheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN);
  //Activate the next cell
  lastCell.offset(1, 0).activate();
} 

第2页“飞行任务”的屏幕截图

如果有比我更有知识的人能帮忙,我将不胜感激。在我当前的谷歌工作表文件中,我希望工作表1“LOGBOOK”在打开时,将光标放在列A的第一个空单元格上。同时,在打开时,我希望工作表2“飞行职责”将光标放在列的第一个空单元格上当我选择该选项卡时。

下面是底部工作表名称的屏幕截图。我唯一需要脚本的表格是1个日志和2个飞行任务。

工作表名称的屏幕截图

非常感谢!

共有3个答案

鲁烨熠
2023-03-14

尝试...

function onOpen(event){
  var sh = event.source.getActiveSheet();
  sh.getRange('A'+getFirstEmptyDataRow(sh)).offset(1,0).activate();
}
function onSelectionChange(event){
  var sh = event.source.getActiveSheet();
  sh.getRange('A'+getFirstEmptyDataRow(sh)).offset(1,0).activate();
}
function getFirstEmptyDataRow(sheet) {
  var range = sheet.getRange("A4");
  return range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();           
}

https://docs.google.com/spreadsheets/d/1Um9gnfz3VH6Vf0PwNVW8LOD3F63qb5h7PQl-hSYT_0E/copy

南宫炜
2023-03-14

我测试了下面的代码。最后一行将在尽可能多的工作表中激活。无论你打开哪一张纸,你都会落在最下面一行。运行需要一秒钟。

function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var tabs= ss.getSheets();
  for (i=0; i<tabs.length;i++){
    var lr = tabs[i].getLastRow();
    tabs[i].getRange("A"+(lr+1)).activate();
  }
}
蓬化
2023-03-14

这是一个更稳定的版本

function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('↓ Go to ... ↓')
    .addItem('first empty row', 'goToFirstEmptyRow')
    .addToUi();
  var sh = event.source.getActiveSheet();
  sh.getRange('A'+getFirstEmptyDataRow(sh)).offset(1,0).activate();
}
function goToFirstEmptyRow(event){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  sh.getRange('A'+getFirstEmptyDataRow(sh)).offset(1,0).activate();
}
function getFirstEmptyDataRow(sheet) {
  var range = sheet.getRange("A4");
  return range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();           
}
 类似资料:
  • 我有30张单独的工作表,需要合并成一张有多个选项卡的工作表。我可以使用下面的脚本来完成这项工作,但每次都会创建一个新的工作表。当30张单独的工作表中的一张或全部更新时,我只希望这个脚本更新或重写以前创建的“主工作表”。 我正在寻找一个表,其中包含从每个地区的标签。这将允许我与单独更新的所有信息共享一个主控表。

  • 我是脚本shell的业余爱好者,所以我需要帮助我的问题编写shell脚本: 我在这个路径下有2个目录/home/backup : CSC DFG 和每个文件夹(CSC 我想复制所有的文件并打包成一个文件。焦油内部每周目录 所以我的问题是:我这期的剧本怎么样? 谢谢

  • 如何使用Rethfit在同一个参数上添加多个图像/文件以及其他文本数据?

  • 这是我的代码 错误: [src/testresources] 中没有一个功能与过滤器匹配:[@CreateNewCourse.Feature,@CreateNewUserAndEnrolledToaCourse.Feature,@LoginLockout.Feature,@LoginOnNismo.Feature,@StudentCarryoverAttempresults.Feature] 0场

  • 问题内容: 我想从PHP生成MS Excel文件。我知道一个人可以做这样的事情: 但是它将生成一个只有一张图纸的文件。我要生成的文件有多个工作表。我怎样才能做到这一点?也许有第三方图书馆,但我还没有发现太多。 问题答案: 尝试查看PHPExcel。这是一个简单的示例,该示例创建一个包含两页的Excel文件: