Pergunta

Nas Planilhas do Google, eu tenho uma folha com as Respostas do Formulário, e à direita do formulário colunas de eu ter colunas com fórmulas que usam dados de formulário para funções.

No início eu tinha as fórmulas estendido para baixo as linhas para que eles trabalharam na nova envios de formulários, mas achei que o novo formulário de propostas clara a linha de fora :(.

Em vez de manualmente, estendendo-se fórmulas para baixo depois de cada apresentação eu instalados Andrew Stillman do copyDown() script;o que ele faz é copia para baixo as fórmulas depois scripts são submetidos.

Agora o problema que eu estou tendo é que o script funciona quando executado manualmente, mas quando eu comecei a disparar no formulário envia cópias disse fórmula na folha e em todas as outras folhas na planilha.Eu Não Quero que o efeito colateral, como ele mexe toda a folha de cálculo para cima.:((

O que eu pensei fazer é editar o script para que ele só funciona em um Formulário folha de Resposta, não todas as folhas.Mas eu não sei como fazer isso.

O nome da folha, eu quero que ele funcione é "Solicitações", e o gid=8.

Como faço para editar este script para funcionar apenas para que uma folha?

Foi útil?

Solução

Para obter o código para executar apenas uma determinada folha de utilizar .getSheetByName() método.Por exemplo:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var reqSh = ss.getSheetByName('Requests');

Há uma outra forma que poderia ser mais fácil.Você poderia tentar manter uma folha puramente para envios de formulários e usar um arrayformula em uma segunda folha para copiar todos os valores da primeira folha para o mesmo intervalo no segundo.

=ARRAYFORMULA('Pedidos'!A1:H) deve-se copiar as colunas de a a H.

Eu tinha o mesmo problema que você e esta foi a solução.Eu coloquei a minha fórmulas na folha de segunda nas colunas à direita da faixa e copiados-los de maneira normal.As fórmulas que se refere o intervalo copiado na segunda folha.Ele trabalhou um tratamento.

Eu não venha com a idéia de mim mesmo, eu tenho certeza que foi sugerido por alguém na planilha do Google fórum.Eu devia dar-lhe um link para o post, mas eu só olhei e eu não posso encontrá-lo.

Outras dicas

No seu código (comentários no código)

 var sheets = ss.getSheets() [8]; // you choose sheet [8]
 var cellAddresses = new Object();
  for (var i=0; i<sheets.length; i++) { // but you enter a for loop that adresses every sheet in turn...
    var range = sheets[i].getDataRange();

Você deve simplesmente suprimir este loop e usar apenas a folha de número que você deseja para ser precedidas ...

A maneira mais simples seria a de fazer como esta :

 var i = 8
 var sheets = ss.getSheets() [i];
 var cellAddresses = new Object();
    var range = sheets[i].getDataRange();
  ...

e no final do ciclo de eliminar a } que provido o for loop

EDITAR :o novo código deverá ser parecido com este :

function copydown() {
  setCopyDownUid();
  setCopyDownSid();
  logCopyDown();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets() [8];
  var cellAddresses = new Object();
  var i=8
//  for (var i=0; i<sheets.length; i++) {
    var range = sheets[i].getDataRange();
    var lastRow = range.getLastRow();
    var values = range.getValues();
    for (var j=0; j<values.length; j++) {
      for (var k=0; k<values[j].length; k++) {
        var test = values[j][k].toString();
        var start = test.indexOf("copydown");
          if (start == 0) {
            start = start+10;
            var end = test.length-2;
            var length = end-start;
            var value = test.substr(start, length);
            var col = k+1;
            var nextRow = j+2;
            var numRows = lastRow-(nextRow-1);
            if (numRows>0) {
              var destRange = sheets[i].getRange(nextRow, col, numRows, 1);
              destRange.clear();
              var newLastRow = sheets[i].getDataRange().getLastRow();
              var newNumRows = newLastRow-(nextRow-1);
              var newDestRange = sheets[i].getRange(nextRow, col, newNumRows, 1);
              var cell = sheets[i].getRange(nextRow-1, col);
              cell.setFormula(value);
              cell.copyTo(newDestRange);
            }
            var cellAddress = cell.getA1Notation();
            cellAddresses[cellAddress] = test;
          }
      }
    }
    Utilities.sleep(500);
    resetCellValues(cellAddresses, sheets[i]);
  }
//}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top