Separa texto delimitado por barras de columnas y asociarlas
Publicado por Salva (2 intervenciones) el 12/05/2021 20:44:54
Dispongo de una hoja de cálculo de Google, donde algunos textos podrían estar separados por barra diagonal (‘/’). (ver figura 1)

He adaptado el código de google apps script para que separe y escriba en otra hoja cada uno de los códigos de la primera columna en varias filas, tantas como códigos haya en cada celda, manteniendo los textos del resto de las columnas. Este seria el resultado (figura 2):

Este es el código que lo hace posible:
Hasta ahí, todo ok. Ahora necesito que haga lo mismo, pero que considere también los textos separados de las segunda y tercera columna mediante barras diagonales y le asigne a cada fila, en el mismo orden que están escritas inicialmente, cada uno de los elementos. Por ejemplo, si la primera columna tenemos 111/555/5545 y en la segunda A/B/C, el código debe asignar a 111 el valor A, a 555 el valor B y a 5545 el valor C. Del mismo modo, asignarían para cada elemento de la segunda fila (112/2521/2541/555) los valores G, H, T y U, respectivamente. Los valores de la segunda columna y la tercera tendrán siempre 1 elemento o bien tantos como haya en la primera.
El resultado del nuevo código seria este:

¿Alguien me puede ayudar con esto? le estará enormemente agradecido.

He adaptado el código de google apps script para que separe y escriba en otra hoja cada uno de los códigos de la primera columna en varias filas, tantas como códigos haya en cada celda, manteniendo los textos del resto de las columnas. Este seria el resultado (figura 2):

Este es el código que lo hace posible:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function formatTest() {
// Filevar ss = SpreadsheetApp.getActiveSpreadsheet();
// Get rawData sheetvar rawData = ss.getSheetByName('Hoja 1');
// Input datavar data = rawData.getRange("A1:C").getValues(); // Gets titles and options in a single call to the
sheet
// Initialise an array that will hold the outputvar outputArray = [];
// Name a variable to hold the data from each set of optionsvar options;
// Start looping through the datafor (var row = 0; row < data.length; row++) {
// Split the options into an array: "Option1, Option2, Option3" ---> [Option1, Option2, Option3]//options = data[row][0].split(","); // sin convertir datos en stringoptions = data[row][0].toString().split("/");
// Loop through the array of split options and place each of them in a new rowfor (var element = 0; element < options.length; element++) {
//outputArray.push([options[element], data[row][1],data[row][2]]); // options[element]=>> Place thetitle in a new row // resto =>> Place one option in the 2nd column of the rowoutputArray.push([options[element], data[row][1],data[row][2]]);
} // Options loop ends here
} // Data loop ends here
// Get processedData sheetvar processedData = ss.getSheetByName('Hoja 2');
// clear existingprocessedData.clear()
// Get last row in processedData sheetvar lastRow = processedData.getLastRow();
// Post the outputArray to the sheet in a single callprocessedData.getRange(lastRow + 1, 1, outputArray.length,
outputArray[0].length).setValues(outputArray);
}Hasta ahí, todo ok. Ahora necesito que haga lo mismo, pero que considere también los textos separados de las segunda y tercera columna mediante barras diagonales y le asigne a cada fila, en el mismo orden que están escritas inicialmente, cada uno de los elementos. Por ejemplo, si la primera columna tenemos 111/555/5545 y en la segunda A/B/C, el código debe asignar a 111 el valor A, a 555 el valor B y a 5545 el valor C. Del mismo modo, asignarían para cada elemento de la segunda fila (112/2521/2541/555) los valores G, H, T y U, respectivamente. Los valores de la segunda columna y la tercera tendrán siempre 1 elemento o bien tantos como haya en la primera.
El resultado del nuevo código seria este:

¿Alguien me puede ayudar con esto? le estará enormemente agradecido.
Valora esta pregunta


0


