首页 > 解决方案 > 谷歌表格脚本缺少一些东西

问题描述

我正在工作表内创建一个小型数据库,我需要脚本将数据复制到另一个工作表选项卡,但出现空错误。我不是 javascript 专家,所以我在这里缺少什么代码?

基本上,当你按下一个按钮时,你会得到一个带有输入的文本模式,所以这个人会写下名字,然后脚本会用 TRUE(复选框)获取所有行,并将所有内容复制到另一张表中,标题是数据和时间该人的姓名。如果返回为空且所有 FALSE 都不会复制并显示一个文本模式,说明今天没有完成任何任务。

提前致谢

function moveValuesOnly() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getRange ("RESUMO!A4:J99");
  var destSheet = ss.getSheetByName("LOG Resumo");
  var row = destSheet.getLastRow()+2; //the starting column of the range
  var column = 1; //the starting row of the range
  var numRows = 97; //the number of rows to return
  var numColumns = 10; //the number of columns to return
  var destRange = destSheet.getRange(row, column, numRows, numColumns);
  var input_text = Browser.inputBox("Encarregado de Turno","Escreve seu nome:", Browser.Buttons.OK);
  var now = new Date();
  var active = ss.getSheetByName("RESUMO");
  var condition = active.getRange('RESUMO!J4:J99').getValue();
  var valueToWatch = "TRUE";
  if (condition == valueToWatch) {
  destSheet.getRange(row-1,1,1,10).mergeAcross().setBackgroundRGB(224, 102, 102).setFontColor("white");
  destSheet.getRange(row-1,1,1).setValue(now + "  ~~   ENCARREGADO DE FECHAR TURNO: " + input_text).activate();
    source.copyTo(destRange, {contentsOnly: true}).setFontColor("black");
  } else {
  Browser.msgBox("Erro","Não exite tarefas completas hoje", Browser.Buttons.OK);
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您的代码存在以下问题:

  1. 如果您将 TRUE 和 FALSE 值作为单元格内容,电子表格将自动将它们识别为布尔值,而不是字符串。因此,还valueToWatch需要是布尔值而不是字符串:var valueToWatch = true;
  2. 如果您想验证每一行的“TRUE”条件 - 您需要在循环中进行。因此,您的代码需要稍作修改。这样做的一种方法是将列中单元格内容所在的所有行推JTRUE一个数组,然后将该数组的内容传递到与该数组具有相同维度的目标范围。生成的代码如下所示:
function moveValuesOnly() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getRange ("RESUMO!A4:J99");
  var destSheet = ss.getSheetByName("LOG Resumo");
  var row = destSheet.getLastRow()+2; //the starting column of the range
  var column = 1; //the starting row of the range
  var input_text = Browser.inputBox("Encarregado de Turno","Escreve seu nome:", Browser.Buttons.OK);
  var now = new Date();
  var active = ss.getSheetByName("RESUMO");
  var condition = active.getRange('RESUMO!J4:J99').getValues();
  destSheet.getRange(row-1,1,1,10).mergeAcross().setBackgroundRGB(224, 102, 102).setFontColor("white");
  destSheet.getRange(row-1,1,1).setValue(now + "  ~~   ENCARREGADO DE FECHAR TURNO: " + input_text).activate();
  var valueToWatch = true;
  var values=source.getValues();
  var array=[];
  for(var i=0;i<condition.length;i++){
   if (condition[i][0] == valueToWatch) {
    array.push( values[i]);    
   }
  }   
  if(!array) {
    Browser.msgBox("Erro","Não exite tarefas completas hoje", Browser.Buttons.OK);
  }
  else {
      var numRows = array.length; //the number of rows to return
      var numColumns = array[0].length; //the number of columns to return
      var destRange = destSheet.getRange(row, column,numRows , numColumns);
      destRange.setValues(array).setFontColor("black");
    }  
}

推荐阅读