Электронная таблица не открывается openById () - PullRequest
0 голосов
/ 12 апреля 2020

Может быть, вы можете помочь мне с моей проблемой, которую я пытался решить часами. У меня есть функция, которая должна копировать некоторые значения ячеек строки, если в столбце 6 строки устанавливается значение 6, в другую электронную таблицу. Я уже использовал ui.alert (), чтобы узнать, где перестает работать функция, и это когда я перезаписываю переменную ss = SpreadsheetApp.getActiveSpreadsheet () с помощью ss = SpreadsheetApp.openById ('123456789'). Я уже сделал это в другом Google Script, и там это работает! Здесь вы можете увидеть мой код:

var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  ui.createMenu('xyz')
      .addItem('xyz', 'menuItem1')     
      .addToUi();
}

function menuItem1() {
var row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
var col = 2;
var x = SpreadsheetApp.getActiveSheet().getRange(row, col).getValue();
var y = Browser.inputBox(titletranslation , 'Please enter the translation here', Browser.Buttons.OK_CANCEL);
  if(y != "cancel" && y != "") {
var id ="123456789"
doc = DriveApp.getFileById(id).makeCopy(y)
doc.setSharing(DriveApp.Access.ANYONE_WITH_LINK,DriveApp.Permission.EDIT)
var url = doc.getUrl()
SpreadsheetApp.getActiveSheet().getRange(row, 5).setValue(url)
  }
}

function onEdit(event){
var row = event.range.getRow()
var column = event.range.getColumn()
if(column == 6) {
  if(ss.getActiveSheet().getRange(row, column).getValue() == 6) {
    var x = ss.getActiveSheet().getRange(row, 1)
    var y = ss.getActiveSheet().getRange(row, 2)
    var z = ss.getActiveSheet().getRange(row, 3)
    var xx = ss.getName()
    var yy = ss.getActiveSheet().getRange(row,4)

    ss = SpreadsheetApp.openById('123456')

    ss.setActiveSheet(ss.getSheetByName('Need to be published'))

    ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,1).setValue(x)
    ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,2).setValue(y)
    ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,3).setValue(z)
    ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,4).setValue(xx)
    ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,5).setValue(yy)



  }

}

}

Надеюсь, вы знаете, в чем проблема :) Заранее спасибо

1 Ответ

1 голос
/ 13 апреля 2020

Проблема заключается в комбинации

var x = ss.getActiveSheet().getRange(row, 1)

и

ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,1).setValue(x)

Позволяет преобразовать его в:

var range1 = ss.getActiveSheet().getRange(row, 1);
var range2 = ss.getActiveSheet().getRange(ss.getActiveSheet().getLastRow() + 1,1);
range2.setValue(range1);

range1 (или x) не является значением, поэтому его использование в качестве параметра для метода setValue() неверно, см. Документацию .

Если вы хотите присвоить значение из range1 для range2, правильный синтаксис будет

var value = range1.getValue();
range2.setValue(value);

. Вам следует изменить все строки, где вы используете метод setValue() соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...