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個元素的字符串時,這兩個腳本的執行時間幾乎相同。再次,我非常感謝你,非常感謝你。 –

相關問題