拆分一些字符串并将它们传递到两个不同的列中。

时间:2017-04-28 23:03:52

标签: google-apps-script

我遇到以下情况:

表1(输入):

www.url1.com?somestuff
www.url2.com?somestuff
www.url3.com?somestuff
www.url4.com?somestuff

表2(预期输出):

Col1          Col2
www.url1.com  ?somestuff
www.url2.com  ?somestuff
www.url3.com  ?somestuff
www.url4.com  ?somestuff

这是我到目前为止所做的事情:

function testwoD() {
var input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw_data");
var output = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet11");
var row_count = input.getLastRow()
var col_count = input.getLastColumn();

raw_data = input.getRange(1, 1,row_count,col_count).getValues()

tempArr = [] // or new Array
for (var i = 0; i < row_count; i++) { 
    tempArr.push(raw_data[i][6].split("?")[0]);
    tempArr.push(raw_data[i][6].split("?")[1]);
}

var toAddArray = [];
for (i = 0; i < tempArr.length; ++i){
    toAddArray.push([tempArr[i]]);
}

Logger.log(tempArr)
output.getRange(1, 1,730,1).setValues(toAddArray);
}

这是我在Sheet2上的结果:

www.url1.com
?somestuff
www.url2.com
?somestuff
www.url3.com
?somestuff
www.url4.com
?somestuff

如何达到预期的输出?我已经阅读了很多有关转置数组的问题,但无法找到可以帮助我解决问题的答案。

谢谢!

1 个答案:

答案 0 :(得分:3)

而不是推送和连接,你可以做到这一点

tempArr = [] // or new Array
for (var i = 0; i < row_count; i++) { 
    tempArr[i] = []
    tempArr[i][0] = raw_data[i][6].split("?")[0];
    tempArr[i][1] = raw_data[i][6].split("?")[1];
}

或者更好的是你只需推动整个分裂阵列。

for (var i = 0; i < row_count; i++) { 
    tempArr.push(raw_data[i][6].split("?"))
}

基本思想是获取每行数组中的两列索引。因此,当你执行setValues时,它会写入两个相应的列

最终代码:

function testwoD() {
var input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Raw_data");
var output = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet11");
var row_count = input.getLastRow()
var col_count = input.getLastColumn();

raw_data = input.getRange(1, 1,row_count,col_count).getValues()

tempArr = [] // or new Array
for (var i = 0; i < row_count; i++) { 
    tempArr[i] = []
    tempArr[i][0] = raw_data[i][6].split("?")[0];
    tempArr[i][1] = raw_data[i][6].split("?")[1];
}
// Not sure what this code is suppose to achieve? hence removed it
/*var toAddArray = [];
for (i = 0; i < tempArr.length; ++i){
    toAddArray.push([tempArr[i]]);
}*/

Logger.log(tempArr)
// You can use setValues and get numof rows and columns using array length
output.getRange(1, 1,tempArr.length,tempArr[0].length).setValues(tempArr);
}

希望有所帮助