将工作表名称添加到最后一行

时间:2018-06-10 01:12:01

标签: google-apps-script google-sheets

有两张纸,一张名为" Original"和一个名为" User1"

我想要一个菜单​​项供用户点击。我希望将活动工作表的名称[User1]添加到" Original"的最后一列的最后一行。片材。

不幸的是,我没有任何代码,因为GAS似乎在文档中被击中/遗漏,而且我在Google产品论坛中没有找到关于执行此功能的任何内容。

编辑:我已对功能进行了更改,并希望将工作表名称添加到第J列的第一行。但是,它没有像我想象的那样工作。有什么帮助吗?

function onOpen(e) {
  SpreadsheetApp.getUi()
     .createMenu('My Menu')
     .addItem('Store Active Sheet Name', 'getActiveSheetName')
  .addToUi();
}


function getActiveSheetName() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var active_sheet = ss.getActiveSheet();
    var active_sheet_name = active_sheet.getSheetName();

    var target_sheet_name = 'GroupA';
    var target_sheet = ss.getSheetByName(target_sheet_name);
    var target_sheet_lastrow = target_sheet.getLastRow()+1
    var target_sheet_lastcolumn = target_sheet.getLastColumn()
    var firstFreeRow = parseInt(getLastRowInColumn(target_sheet_name, "J:J")) + 1
    //var range = target_sheet.getRange(target_sheet_lastrow,target_sheet_lastcolumn);
    var range = target_sheet.getRange(firstFreeRow,target_sheet_lastcolumn);

    range.setValue(active_sheet_name);
}

function getLastRowInColumn(sheetObj, range) {
   return sheetObj.getRange(range)
            .getValues().filter (String).length
}

1 个答案:

答案 0 :(得分:-1)

打开脚本编辑器(“工具”菜单),将其粘贴,保存并刷新工作表。当您尝试运行它时,您必须批准菜单加载项。

function onOpen(e) {
  SpreadsheetApp.getUi()
     .createMenu('My Menu')
     .addItem('Store Active Sheet Name', 'getActiveSheetName')
  .addToUi();
}


function getActiveSheetName() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var active_sheet = ss.getActiveSheet();
    var active_sheet_name = active_sheet.getSheetName();

    var target_sheet_name = 'Original';
    var target_sheet = ss.getSheetByName(target_sheet_name);
    var range = target_sheet.getRange(target_sheet.getMaxRows(),target_sheet.getMaxColumns());

    range.setValue(active_sheet_name);
}
编辑:你应该确保解释为什么某些东西不起作用。你检查了执行情况吗?什么是错误消息?当它不起作用时发生了什么?它是否更改了错误的单元格或值,或者甚至没有运行,因为代码中存在错误?当您寻求帮助时回答这些问题会让其他人更好地帮助您。

您从另一个答案中复制了getLastRowInColumn函数,但是它有一些错误,如果有空单元格则无法工作。尝试下面的函数,它从底部找到没有空单元格的第一行,即带有数据的最后一行,如果范围不只是一列,它也可以工作。

此外,您还将工作表名称作为此函数的第一个参数。它应该是工作表对象,target_sheet。

function getLastRowInColumn(sheetObj, column_range) {
   var values = sheetObj.getRange(column_range).getValues();
   for (var index = values.length - 1; index >= 0; index--) {
       var row_array = values[index];
       if (row_array.join("") !== "") return index + 1;
   }
   return 0;
}