1

我是编程的初学者。 我的GS项目中的代码片段效果很好。Google App脚本 - 如何通过一个阵列格式化字符串来设置电子表格文件的值

var nextRow = Sheet_current.getLastRow() + 1; // Line 1 
var str = "1,2,3,4,5,6"; 
var temp = new Array(); //Line 3 
temp = str.split(","); 
var target = new Array(); //Line 5 
for (var i = 0; i < temp.length; i++) { 
    target.push([temp[i]]); 
} 
Sheet_current.getRange(Sheet_current.getLastRow() + 1, 1, target.length, target[0].length).setValues(target); //Line 9 

结果在我的电子表格文件运行上述代码时: result

我使用一个字符串作为输入,然后将其转换成一个临时数组(第3行)。我继续声明目标数组,将临时数组的值传递给目标数组。 (第5行到第7行)

最后,我使用目标数组将数据转储到我的电子表格中(垂直,目标数组中的每个单词对应于电子表格文件中的一行)(第9行)。

有人可以帮助我如何优化仅通过一个数组的代码。

真诚地感谢。

回答

0

如果您只想提供不同行的结果并从第一列开始,则可以使用appendRow() method。下面是使用在你的情况下,例如:

function myFunction() { 
    var Sheet_current = SpreadsheetApp.getActiveSheet(); 
    var nextRow = Sheet_current.getLastRow() + 1; // Line 1 
    var str = "1,2,3,4,5,6"; 
    var target = new Array(); //Line 3 
    target = str.split(","); 
    for (var i = 0; i < target.length; i++) { 
    Sheet_current.appendRow([target[i]]); 
    } 
} 

或者,你可以做你的第一个阵列上你想要的修改,让您的结构,如:

function myFunction2(){ 
    var Sheet_current = SpreadsheetApp.getActiveSheet(); 
    var nextRow = Sheet_current.getLastRow() + 1; 
    var str = "1,2,3,4,5,6"; 
    var temp = new Array(); 
    temp = str.split(","); 
    for (var i = 0; i < temp.length; i++) { 
    temp[i] = [temp[i]]; // To convert your Array[] on Array[][] 
    } 
    Sheet_current.getRange(Sheet_current.getLastRow() + 1, 1, temp.length, temp[0].length).setValues(temp); 
} 

但我不建议这样做方法,因为对于小程序来说是可以的,但对于较大的程序可能会很棘手。

+0

我感谢您的反馈 - Pierre-Marie Richard。 我在GS项目中替换了您的代码。 几乎只是使用我的一个原始数组的问题已经解决,但是当我重新检查日志执行时,我发现方法然后执行间隔0.3-0.5秒,而方法之间0.7 - 0.9秒。 我刚刚从运行了代码。在回复给你的同时,从你的得到更多。现在我将运行你的第二个代码片段。 再次,我非常感谢你。谢谢。 –

+0

appendRow()方法是一个更长的时间,但作为原子的优势,这可能是有用的。 –

+0

非常好,你的第二个代码在我的项目中运行得非常好。我的问题完全解决了。也许我会考虑使用我的原始代码或第二个代码片段,因为当我尝试输入包含1000个元素的字符串时,这两个脚本的执行时间几乎相同。再次,我非常感谢你,非常感谢你。 –

相关问题