【发布时间】:2020-12-22 15:27:38
【问题描述】:
我必须使用 Google Apps 脚本为内部客户创建自动报告。直截了当:检索数据、操作数据、一些 if 测试以及以新格式打印数据。
我的问题是,数据源使用了一个非常复杂的自定义函数(也是我设计的,用于日期计算),这对客户端来说是必不可少的,而且显然我无法使用方法 .getValues 来自自定义函数。
这是我得到的错误:
9:42:41 AM Error Exception: Cannot convert 'function () { [native code] }' to int.
ARROBA @ Scripts Automáticos.gs:5
这是 GAS 中的一个真正问题吗?是否有任何解决方法?或者,更好的是,我编码错误了吗?我尝试了间接引用(例如,不是直接从自定义函数获取数据,而是从引用该数据的其他单元格获取数据),但它不起作用。
这是出现问题的那一行:
var data = ss.getRange(2, 1, ss.getLastRow, ss.getLastColumn).getValues
以下是不起作用的代码示例:
function ARROBA() {
var ss = SpreadsheetApp.openById([ID]).getSheetByName([sheet])
var data = ss.getRange(2, 1, ss.getLastRow, ss.getLastColumn).getValues
var today = new Date()
var x
var y
for (x = 0; x < data.length; x++) {
if (data[x][34] == "Sim") {
ss.getRange(x+2,7).setValue(data[x][7]+"\n@\n"+(today.getDay+'/'+today.getMonth+'/'+today.getFullYear))
ss.getRange(x+2,34).setValue()
ss.getRange(x+2,35).setValue(data[x][35]+"\n@\n")
ss.getRange(x+2,36).setValue(data[x][36]+"\n@\n")
ss.getRange(x+2,37).setValue(data[x][37]+"\n@\n")
ss.getRange(x+2,38).setValue(data[x][38]+"\n@\n")
}
}
}
这里是自定义函数:
function SLABANKING (start, startcongelamento, finalcongelamento, startdeclinio, finaldeclinio, cancelamento, end) {
var today = new Date();
var congelamento = 0
var declinio = 0
var x
var y
var z
var s
//typing error handling
if (start == null || start == '') {
return 'Necessário incluir data de início'
} else if(startcongelamento.toString.length != finalcongelamento.toString.length && startcongelamento.toString.length - finalcongelamento.toString.length != 11) {
return 'Erro de preenchimento de datas de congelamento'
} else if(startdeclinio.toString.length != finaldeclinio.toString.length && startdeclinio.toString.length - finaldeclinio.toString.length != 11) {
return 'Erro de preenchimento de datas de reabertura'
} else {
//set de variáveis + complexas
if(startcongelamento.toString().lastIndexOf('@') < 0) {
var sconge = startcongelamento.toString().split('\n')
var fconge = finalcongelamento.toString().split('\n')
var sdec = startdeclinio.toString().split('\n')
var fdec = finaldeclinio.toString().split('\n')
} else {
var sconge = startcongelamento.toString().slice(startcongelamento.toString().lastIndexOf('@')+2, startcongelamento.length).split('\n')
var fconge = finalcongelamento.toString().slice(finalcongelamento.toString().lastIndexOf('@')+2, finalcongelamento.length).split('\n')
var sdec = startdeclinio.toString().slice(startdeclinio.toString().lastIndexOf('@')+2, startdeclinio.length).split('\n')
var fdec = finaldeclinio.toString().slice(finaldeclinio.toString().lastIndexOf('@')+2, finaldeclinio.length).split('\n')
}
//congelamento
if(startcongelamento == null || startcongelamento == undefined || startcongelamento == ''){
} else if(startcongelamento.length != finalcongelamento.length) {
if (startcongelamento.length > 10 && finalcongelamento.length > 10) {
Logger.log('desigual, start e final > 10')
var display = []
for (x = 0; x < sconge.length; x++) {
if (x == sconge.length-1) {
display.push(Math.floor(((Date.parse(today) - new Date(sconge[x].toString().slice(3,5)+'/'+sconge[x].toString().slice(0,2)+'/'+sconge[x].toString().slice(6,10)))/8.64E7)))
} else {
display.push((new Date(fconge[x].toString().slice(3,5)+'/'+fconge[x].toString().slice(0,2)+'/'+fconge[x].toString().slice(6,10)) - new Date(sconge[x].toString().slice(3,5)+'/'+sconge[x].toString().slice(0,2)+'/'+sconge[x].toString().slice(6,10)))/8.64E7)
}
}
for (y = 0; y < display.length; y++) {
congelamento = Number(congelamento) + Number(display[y])
}
return Math.ceil(congelamento)
} else if (startcongelamento.length > 10) {
Logger.log('desigual, só start > 10')
var display = []
for (x = 0; x < sconge.length; x++) {
if (x == sconge.length-1) {
display.push(Math.floor(((Date.parse(today) - new Date(sconge[x].toString().slice(3,5)+'/'+sconge[x].toString().slice(0,2)+'/'+sconge[x].toString().slice(6,10)))/8.64E7)))
} else {
display.push((new Date(fconge) - new Date(sconge[x].toString().slice(3,5)+'/'+sconge[x].toString().slice(0,2)+'/'+sconge[x].toString().slice(6,10)))/8.64E7)
}
}
for (y = 0; y < display.length; y++) {
congelamento = Number(congelamento) + Number(display[y])
}
return Math.ceil(congelamento)
} else {
Logger.log('desigual, nenhum > 10')
congelamento = Math.floor(((Date.parse(today) - new Date(sconge))/8.64E7))
return Math.ceil(congelamento)
}
} else {
if (startcongelamento.length > 10) {
Logger.log('igual, start e final > 10')
for (x = 0; x < sconge.length; x++) {
congelamento = congelamento + (new Date(fconge[x].toString().slice(3,5)+'/'+fconge[x].toString().slice(0,2)+'/'+fconge[x].toString().slice(6,10)) - new Date(sconge[x].toString().slice(3,5)+'/'+sconge[x].toString().slice(0,2)+'/'+sconge[x].toString().slice(6,10)))/8.64E7
}
} else {
Logger.log('igual, nenhum > 10')
congelamento = (new Date(fconge) - new Date(sconge))/8.64E7
}
}
//declinio
if (startdeclinio == null || startdeclinio == undefined || startdeclinio == ''){
} else {
if (startdeclinio.length > 10) {
Logger.log('declinio, >10')
for (y = 0; y < sdec.length; y++) {
declinio = declinio + (new Date(fdec[y].toString().slice(3,5)+'/'+fdec[y].toString().slice(0,2)+'/'+fdec[y].toString().slice(6,10)) - new Date(sdec[y].toString().slice(3,5)+'/'+sdec[y].toString().slice(0,2)+'/'+sdec[y].toString().slice(6,10)))/8.64E7
}
} else {
Logger.log('declinio, <10')
declinio = (new Date(fdec) - new Date(sdec))/8.64E7
}
}
if (start.length > 10) {
var nstart = start.toString().slice(start.toString().lastIndexOf('@')+2, start.length)
if(cancelamento != null && cancelamento != '') {
return ((((new Date(cancelamento) - new Date(nstart.toString().slice(3,5)+'/'+nstart.toString().slice(0,2)+'/'+nstart.toString().slice(6,10)))/8.64E7 - congelamento) - declinio))
} else if(end != null && end != '') {
return ((((new Date(end) - new Date(nstart.toString().slice(3,5)+'/'+nstart.toString().slice(0,2)+'/'+nstart.toString().slice(6,10)))/8.64E7 - congelamento) - declinio))
} else {
return ((Math.floor((Date.parse(today) - new Date(nstart.toString().slice(3,5)+'/'+nstart.toString().slice(0,2)+'/'+nstart.toString().slice(6,10)))/8.64E7) - congelamento) - declinio)
}
} else {
var nstart = start
if(cancelamento != null && cancelamento != '') {
return ((((new Date(cancelamento) - new Date(start))/8.64E7 - congelamento) - declinio))
} else if(end != null && end != '') {
return ((((new Date(end) - new Date(start))/8.64E7 - congelamento) - declinio))
} else {
return ((Math.floor((Date.parse(today) - new Date(start))/8.64E7) - congelamento) - declinio)
}
}
}
}
【问题讨论】:
-
.getValues未被调用。这是故意的吗?
标签: javascript typescript function google-apps-script google-sheets