Hola, soy un iniciador de las secuencias de comandos, aquí está el código y para referencia

Lo que obtengo ingrese la descripción de la imagen aquí lo que quiero lograr ingrese la descripción de la imagen aquí / ** * @ param quest1 Pregunta de la nota * @ param quest1 Respuesta de la nota * @ función personalizada * / función DMNOTE (quest1, ans1, quest2, ans2, quest3, ans3,) { var ss = SpreadsheetApp.getActiveSpreadsheet (). getActiveSheet (); var resultado = quest1 + '-' + ans1 + ',' + quest2 + '-' + ans2 + ',' + quest3 + '-' + ans3; resultado de retorno; }

Quiero lograr una referencia absoluta para el parámetro "búsqueda" y quiero que se repita por el resto de las columnas hasta la columna donde ingrese la función. También en la columna "Fórmula requerida" he puesto formla como referencia, así es como quiero que mi UDF trabajo.

A continuación, necesito filtrar "Acuerdo de no solicitud" y mantener solo "No" debajo y Copiar y pegar todas las columnas resaltadas en azul para actualizar la pestaña.

function toFilter (){
// filter and retain "no" in non-solicit agreement
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Worksheet");
ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn());
var createfilter = SpreadsheetApp.newFilterCriteria().setHiddenValues("Yes").build();
ss.getFilter().setColumnFilterCriteria(8, createfilter);
}

Espero que tenga sentido. Cualquier ayuda es apreciada

1
Shiva 15 abr. 2020 a las 13:09

2 respuestas

La mejor respuesta

Para trabajar con cualquier número de argumentos, puede tener una función como la siguiente en su script

function DMNOTE(...arg){
   let result = ''
   for(let i=0;i<arg.length;i++){
     result += `${arg[i]}-${arg[i+1]},`
     i++;
   }
   return result.substring(0, result.length - 1); 
}

Y luego forme su hoja de cálculo que puede llamar como =DMNOTE(A$1,A2,B$1,B2,C$1,C2) o =DMNOTE(A$1,A2,B$1,B2,C$1,C2,D$1,D2). La función procesará todos los argumentos que se pasan y devolverá el resultado.

1
Anees Hameed 15 abr. 2020 a las 18:15

Cómo filter "non-solicit agreement" and take only data which has "no"

El código que proporcionó ya se acerca mucho a lo que desea, solo necesita hacer los siguientes ajustes:

  • setHiddenValues() espera una matriz, no una cadena, así que cambie "Yes" a ["Yes"]
  • getFilter() solo funciona para modificar un filtro que ya está presente en la hoja, en caso de que no haya ninguno, es mejor eliminar el filtro anterior y crear uno nuevo:
function toFilter(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Worksheet");
  ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn());
  var createfilter = SpreadsheetApp.newFilterCriteria().setHiddenValues(["Yes"]).build();
  if(ss.getFilter() != null) {
    ss.getFilter().remove();
  }
  ss.getDataRange().createFilter().setColumnFilterCriteria(8, createfilter);
}

Cómo Copy & Paste all columns highlited in blue to update tab

Construir una función que

  • llamadas toFilter()
  • comprueba si todas las filas están ocultas
  • copia las filas no ocultas en una matriz
  • pega esta matriz en la hoja Update
function copyIfNotHidden(){
  toFilter();
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spreadsheet.getSheetByName("Worksheet");
  var sheet2 = spreadsheet.getSheetByName("Update");
  var data = sheet1.getDataRange().getValues();
  var array = [];
  for (var i = 0; i < data.length; i++){
    if(sheet1.isRowHiddenByFilter(i+1)==false){
      array.push(data[i]);
    }
  }
  sheet2.getRange(sheet2.getLastRow()+1, 1, array.length, array[0].length).setValues(array);
}
1
ziganotschka 16 abr. 2020 a las 11:16