2014-02-10 2 views
1

, поскольку в заголовке указано, что я пытаюсь найти способ обработки некоторых данных в таблицу в приложение Google. Я думаю, что лучший способ - прямо привести пример и заранее поблагодарить вас за вашу поддержку, как всегда.значения слияния в столбце в строке с разделителем кавычек «|» на основе сравнения со значениями другого столбца

просто:

sheet1 (colA, colB) 

sheet2 (colA', colB') 

sheet1   
    colA colB  
1 xxx 40  
2 xxx 42  
3 yyy 42  
4 yyy 44 
. ... etc. 


sheet2 

colA' colB' 

1 xxx 40 | 42 

2 yyy 42 | 44 

3 ... .. | .. (etc.) 

Я был бы признателен за подсказку коды для Google App сценария. благодаря

EDIT (в процессе)

привет,

Я надеюсь, что общий доступ к файлу ответить на ваши вопросы.

листы уже существуют, код написан частично, и мне нужна помощь в этом.

нет дублирования в ColumnB для статьи ххх или ууу или ZZZ и др ..

в листе «sheet_demo» указывает на то, что сценарий должен быть.

Spreadsheeet demo


function merge_col() { 

    var sheet = SpreadsheetApp.openById("0AiuqXkUqDMgzdFM5aVNxeEhPbWFmbGhybl9TVkt4ZWc"); 
    var ss_sorg = sheet.getSheetByName('sheet1'); 
    var ss_dest = sheet.getSheetByName('sheet2'); 

    var sorg_data = ss_sorg.getRange("A2:C").getValues(); 
    var dest_data = ss_dest.getRange("A2:C").getValues(); 
    var dest_Cod = []; 
    var dest_Des = []; 
    var temp_Cod, temp_Des; 

    for (var i = 0; i < sorg_data.length; i++) { 

    temp_Cod = null; 
    temp_Des = null; 

    for (var j = 1; j < sorg_data.length; j++) { 

     if (sorg_data[i][0] == sorg_data[j][0].toString().match(sorg_data[i][0]) && sorg_data[i][0] != "") { 

     temp_Cod = sorg_data[i][1]; 
     temp_Des = sorg_data[i][2]; 

     break; 
     } 
    } 

    dest_Cod.push([temp_Cod]); 
    dest_Cod.join('|'); 
    dest_Des.push([temp_Des]); 
    dest_Des.join('|'); 
    } 
    if (dest_Cod.length > 0 || dest_Des.lenght > 0) { 
     ss_dest.getRange(2, 2, dest_Cod.length, 1).setValues(dest_Cod); Logger.log(dest_Cod) 
     ss_dest.getRange(2, 3, dest_Des.length, 1).setValues(dest_Des); Logger.log(dest_Des) 
    } 
} 

EDIT (FINAL) ТКС Serge!

function merge_col() { 
    var ss = SpreadsheetApp.getActive().getSheetByName('sheet1'); 
    var data = ss.getDataRange().getValues(); 
    var header = data.shift(); 
    var col1 = data[1][0]; 
    var col2 = ''; 
    var col3 = ''; 
    var dataSheet2 = [header]; 
    for(var i=0 ; i<data.length ; i++){ 
    Logger.log(data[i][0]+' - '+col1+' - '+data[i][2]) 
    if(col1==data[i][0]){ 
     col1 = data[i][0]; 
     col2+=data[i][1]+' | '; 
     col3+=data[i][2]+' | '; 
    }else{ 
     dataSheet2.push([col1,col2,col3]); 
     var col1 = data[i][0]; 
     col2 = data[i][1]+' | '; 
     col3 = data[i][2]+' | '; 
    } 
    } 
    dataSheet2.push([col1,col2,col3]); 
    Logger.log(dataSheet2); 
    var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2'); 
    sheet2.clear(); 
    sheet2.getRange(1, 1, dataSheet2.length, dataSheet2[0].length).setValues(dataSheet2); 
} 
+0

Всего несколько вопросов: вы пробовали какой-то код? Есть ли более 2 случаев появления одного и того же элемента xxx или yyy? Ли лист уже существует? –

+0

Спасибо, теперь это совершенно ясно :-) –

ответ

0

Вот код, который делает именно то, что вы ожидали, используя простой цикл и сравнение.

function merge_col() { 
    var ss = SpreadsheetApp.getActive().getSheetByName('sheet1'); 
    var data = ss.getDataRange().getValues(); 
    var header = data.shift(); 
    var col1 = data[1][0]; 
    var col2 = ''; 
    var col3 = ''; 
    var dataSheet2 = [header]; 
    for(var i=0 ; i<data.length ; i++){ 
    Logger.log(data[i][0]+' - '+col1+' - '+data[i][2]) 
    if(col1==data[i][0]){ 
     col1 = data[i][0]; 
     col2+=data[i][1]+' | '; 
     col3+=data[i][2]+' | '; 
    }else{ 
     dataSheet2.push([col1,col2,col3]); 
     var col1 = data[i][0]; 
     col2 = data[i][1]+' | '; 
     col3 = data[i][2]+' | '; 
    } 
    } 
    dataSheet2.push([col1,col2,col3]); 
    Logger.log(dataSheet2); 
    var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2'); 
    sheet2.clear(); 
    sheet2.getRange(1, 1, dataSheet2.length, dataSheet2[0].length).setValues(dataSheet2); 
} 
+0

отлично, он отлично работает. ТКС! – gigisan76

+0

добро пожаловать, не забудьте отметить как ответ :-) –

0

посмотреть на this post, он хочет сделать почти то же самое. Изменение 2 строки кода, и это делается:

function myFunction() { 
    var objList={}; 
    var ss = SpreadsheetApp.getActive().getActiveSheet(); 
    var data = ss.getDataRange().getValues(); 
    for(var i in data){ 
    // for(var j in data[i]){ 
     if(typeof objList[data[i][0]]=="undefined"){ 
     objList[data[i][0]]=[]; // new array 
     objList[data[i][0]].push(data[i][1]); // push the value of the second column 
     } 
     else{ 
     objList[data[i][0]].push(data[i][1]); 
     } 
    //} 
    } 
    var objTable=[]; 
    for(var k in objList){ 
    objTable.push([k,objList[k]]); 
    } 
    Logger.log(objTable); 
    ss.clear(); 
    ss.getRange(1, 1, objTable.length, objTable[0].length).setValues(objTable); 
} 
Смежные вопросы