Добавить название листа в последнюю строку - PullRequest
0 голосов
/ 10 июня 2018

Есть два листа, один с именем «Оригинал» и один с именем «Пользователь1»

Я бы хотел, чтобы пользователь щелкнул по пункту меню.Я хотел бы, чтобы имя активного листа [User1] было добавлено в последнюю строку в последнем столбце «Оригинального» листа.

К сожалению, у меня нет кода, так как кажется, что 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 голосов
/ 10 июня 2018

Откройте редактор сценариев (меню «Инструменты»), вставьте его, сохраните и обновите свой лист.Вам нужно будет одобрить дополнение к меню, когда вы попытаетесь запустить его.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...