0

因此,当我在自定义函数上运行自定义函数时,出现错误:“执行自定义函数时出现内部错误”。Google表格自定义功能定时输出

Google指定“自定义函数调用必须在30秒内返回,否则单元将显示错误:执行自定义函数的内部错误。

我的自定义函数是这样的:

function ConcatLoop(rangeString, concatString, isPrefix, isOneColumn) { 
    //var rangeString = "A1:A10,B1:B10,C1:C10"; 
    //var concatString = "1x "; 
    //var isPrefix = "true"; 
    //var isOneColumn = "true"; 

    var rangeStringArray = rangeString.split(','); 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var rangeValues=[]; 

    //GRABBING THE VALUES FROM EACH RANGE 
    for(i=0;i<rangeStringArray.length;i++) 
    { 
    var range = sheet.getRange(rangeStringArray[i]); 
    rangeValues.push(range.getValues()); 
    } 

    if(isOneColumn){var newRangeValues = [[]]}; 

    //REMOVES EMPTY STRINGS AND ARRAYS OR CONCATENATES THE STRINGS 
    for (i = 0; i < rangeValues.length; i++) { 
    for (j = 0; j < rangeValues[i].length; j++){ 
     if (rangeValues[i][j] == "") 
     {   
     rangeValues[i].splice(j, 1); 
     j--; 
     } 
     else if(isPrefix == "true") 
     { 
     rangeValues[i][j] = concatString + rangeValues[i][j]; 
     if(isOneColumn){newRangeValues[0].push(rangeValues[i][j])}; 
     } 
     else 
     { 
     rangeValues[i][j] = rangeValues[i][j] + concatString; 
     if(isOneColumn){newRangeValues[0].push(rangeValues[i][j])}; 
     } 
    } 
    if (rangeValues[i] ==""){ 
     rangeValues.splice(i,1); 
     i--; 
    } 
    } 

    //LOG WHILE TESTING 
    //if(isOneColumn){Logger.log(JSON.stringify(newRangeValues))} 
    //else{Logger.log("range values after concat: " + rangeValues)} 

    //RETURN WHILE RUNNING 
    if(isOneColumn){return newRangeValues} 
    else{return rangeValues}; 
} 

当我有插入函数1000倍的值,它需要相当一段时间才能把所有的值。当我在GOogle脚本中测试它时,它运行良好,因为那里没有时间限制。

如果有什么我可以做些什么来解决这个问题或让这个更高效,有人可以告诉我吗?非常感谢!

+0

你的范围可以通过A1:C10,或者你要走多远?时间消耗在getValues()调用中。 [Google最佳实践](https://developers.google.com/apps-script/best_practices)建议尽可能拨打1个电话 –

+0

这是通过多张表。我也需要特定的列,比如Sheet1!A1:A100和Sheet2!E1:E:100等。在这一点上,我正在拨打150个电话。所以我应该通过整个表单作为1个范围?那会把它压缩成27个电话。有27张。 – KirklandBrown373

+0

如果您有27张表格,您如何每页打一个以上的电话?你能分享一个例子,你如何从电子表格中调用这个函数,并带有一个示例参数 –

回答

0

感谢令人难以置信的个人谁评论,我确实找到了答案,所以我会发布给任何人可能需要它。

Google对电子表格中任何自定义函数的执行时间设置了30秒的限制。以上任何内容都会给你一个内部错误。尽管在脚本编辑器中执行时间有5分钟的限制,但如果您的脚本需要30多秒才能执行,则可能存在问题。就我而言,我有太多的单独范围需要将数据提取出来。所以我在for循环中多次调用“getValues(range)”。

解决的办法是将电子表格中的每个整个表单作为一个范围。因此,我的每张27张纸不是有7个范围,而是我的每张27张纸有一个范围。这导致我在内存中有大量不必要的信息,但也导致执行时间从大约45秒到10秒。完全解决了我的问题。

谢谢!