javascript - 电子表格未由 openById() 打开
问题描述
也许你可以帮助我解决我试图解决几个小时的问题。我有一个函数应该将一行单元格的一些值复制到另一个电子表格中,如果在该行的第 6 列中将值设置为 6。我已经使用 ui.alert() 来知道函数在哪里停止工作,并且是在我用 ss = SpreadsheetApp.openById('123456789') 覆盖变量 ss = SpreadsheetApp.getActiveSpreadsheet() 时。我已经在另一个谷歌脚本中做了这个,它在那里工作!在这里你可以看到我的代码:
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)
}
}
}
希望你知道问题是什么:)提前谢谢
解决方案
问题是组合
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
(or x
) 不是一个值,因此将其用作方法的参数setValue()
是错误的,请参阅文档。
如果您想要分配 to 的值,则正确的语法是range1
range2
var value = range1.getValue();
range2.setValue(value);
您应该相应地更改使用该方法的所有行setValue()
。
推荐阅读
- python - 弧线中的不同颜色
- android - 视图与带有 ConstrainLayout 的 NestedScrollView 中的另一个视图重叠
- html - 通过单击行展开 tableRow
- sql-server - SQL 作业中的 SSRS 和订阅
- c# - 一个资源的多个端点的 REST-API 设计
- c# - .NET Core API - 将 DataTable 转换为 JSON(深度)
- python - 如何使用烧瓶用 jinja 渲染内容?
- javascript - 您如何在页面上水平居中引导模式?
- error-handling - 如何完全卸载 RUNDECK
- r - 如何将 ggplot 导出为可调整大小的图像?