变量无法设置

时间:2016-09-28 21:26:31

标签: variables google-apps-script google-sheets

这是我第一次来这里。我曾经在20年前在Turbo Pascal和一些数据库管理方面编程,然后我进入了Med School。

我正在管理某些治疗师必须看到的患者电子表格。我每周在Google Spreadsheets上制作一张,形状为日历。这里有16个时间列,5个组,每组6行,分别为5天和6个治疗师。单元格保存患者的姓名,并根据第一列下面填写的名单列表进行验证。电子表格本身会计算每位患者的会话次数。

第二部分是一个小程序,贯穿每个病人,然后每天,然后每小时,然后每个治疗师。如果患者的姓名匹配,则以粗体显示日期,然后是时间,然后是他预约的治疗师。

每次迭代后,它会与上一次匹配进行比较:如果日期不匹配,则会以粗体显示新的一天。如果匹配,则仅打印时间。它获取电子表格中最后一列的日期(名称和编号),将每天的日期转换为更清晰的格式。

我的问题是:每当患者在完成前与患者同一天开始时,变量匹配并且不写入日期。

我尝试使用var diaprevio=""var diaprevio = 0var diaprevio = diaprevio+diapreviovar diaprevio = dia.getvalue()+1甚至更改变量( diaprevio )的值delete diaprevio,但没有任何变化。我已经确认问题是 diaprevio 保持其价值,因为每当发生这种情况时,如果我在不同的日子添加前患者,问题就会解决。

代码如下:

/* Funciones para generar horarios a partir del calendario
Esta escanea las celdas de calendario de derecha a izquierda y arriba a abajo
Para encontrar el texto coincidente y lo entrega en un documento de texto.
*/

function TerapeutaHora() {

  var activ = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = activ.getActiveSheet(); //Selecciona la hoja activa, no una hoja fija
  var planning = sheet.getRange("A1:S36"); // Rango del calendario + la lista de días
  var ListaPacientes = sheet.getRange("A45:A72"); // Rango de los pacientes activos
  var dia=planning.getCell(1,1);
  doc = DocumentApp.create("Horario"); // Crea un nuevo documento llamado Horario
  var docu = doc.getBody()

  //Primero hacemos que pase por los pacientes activos

   for (var p=1; p < 29; p++) {
     var pacientesource=ListaPacientes.getCell(p,1)

     var par = docu.appendParagraph(pacientesource.getValue())
     par.setHeading(DocumentApp.ParagraphHeading.HEADING2) //Pone el nombre del paciente en HEADING

    //Luego que pase por las filas y las columnas
     for (var d = 0; d < 5; d++){ //cinco días
       for (var b = 1; b < 18; b++){ //18 columnas de horario
         for (var a = 3; a < 9; a++){ //Los 6 nombres
           var columna = (d*7 +a) //Los 7 espacios entre un día y otro
           var pacienteplanning=planning.getCell(columna, b) //Lee el paciente y lo compara con el que está eligiendo en este momento
           var coincidencia = (pacienteplanning.getValue() === pacientesource.getValue())
           if (coincidencia) { //Si coinciden los nombres
             var dia=planning.getCell(columna,18);
             var terapeuta=planning.getCell(columna,1);
             var hora=planning.getCell(1, b);
           if (diaprevio != dia.getValue()) {var nombredia = doc.appendParagraph("\n" + dia.getValue()); nombredia.setHeading(DocumentApp.ParagraphHeading.HEADING3); } // Si el día no es el mismo al previo, lo pone en HEADING.
             doc.getBody().appendParagraph(hora.getValue() + "    " + terapeuta.getValue()) //Escribe el resultado en el documento
           }   
         } 
         var diaprevio = dia.getValue()
         }              
    }
     var diaprevio = dia.getValue()+1;  //THIS IS WHERE I TRY TO CHANGE THE VALUE OF THE VARIABLE
     doc.getBody().appendPageBreak() //Salto de Página
     }
}

我很感激为解决这个问题提供帮助。我认为这种脚本中的变量管理还有一点我还不知道。

非常感谢。

2 个答案:

答案 0 :(得分:0)

我编辑了你的函数以从for循环中提取所有var个关键字。

试试这个,看它是否有效。

/* Funciones para generar horarios a partir del calendario
Esta escanea las celdas de calendario de derecha a izquierda y arriba a abajo
Para encontrar el texto coincidente y lo entrega en un documento de texto.
*/

function TerapeutaHora() {

  var activ = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = activ.getActiveSheet(); //Selecciona la hoja activa, no una hoja fija
  var planning = sheet.getRange("A1:S36"); // Rango del calendario + la lista de días
  var ListaPacientes = sheet.getRange("A45:A72"); // Rango de los pacientes activos
  var dia=planning.getCell(1,1);
  var doc = DocumentApp.create("Horario"); // Crea un nuevo documento llamado Horario
  var docu = doc.getBody()

//Primero hacemos que pase por los pacientes activos
  var p, pacientesource, par, d, b, a, columna, pacientaplanning, coincidencia, dia, teraputa, hora, nmbredia;

  for (p=1; p < 29; p++) {
    pacientesource=ListaPacientes.getCell(p,1)

    par = docu.appendParagraph(pacientesource.getValue())
    par.setHeading(DocumentApp.ParagraphHeading.HEADING2) //Pone el nombre del paciente en HEADING

//Luego que pase por las filas y las columnas
    for (d = 0; d < 5; d++){ //cinco días
      for (b = 1; b < 18; b++){ //18 columnas de horario
        for (a = 3; a < 9; a++){ //Los 6 nombres
          columna = (d*7 +a) //Los 7 espacios entre un día y otro
          pacienteplanning=planning.getCell(columna, b) //Lee el paciente y lo compara con el que está eligiendo en este momento
          coincidencia = (pacienteplanning.getValue() === pacientesource.getValue())
          if (coincidencia) { //Si coinciden los nombres
            dia=planning.getCell(columna,18);
            terapeuta=planning.getCell(columna,1);
            hora=planning.getCell(1, b);
            if (diaprevio != dia.getValue()) {
              nombredia = doc.appendParagraph("\n" + dia.getValue()); 
              nombredia.setHeading(DocumentApp.ParagraphHeading.HEADING3); 
            } // Si el día no es el mismo al previo, lo pone en HEADING.
            doc.getBody().appendParagraph(hora.getValue() + "    " + terapeuta.getValue()) //Escribe el resultado en el documento
          }   
        } 
        diaprevio = dia.getValue()
      }              
    }
    diaprevio = dia.getValue()+1;  //THIS IS WHERE I TRY TO CHANGE THE VALUE OF THE VARIABLE
    doc.getBody().appendPageBreak() //Salto de Página
  }
}

答案 1 :(得分:0)

非常感谢你的帮助。我发现必须重置的变量不是diaprevio而是diadiaprevio在每次迭代中都使用相同的dia进行更新,因此我将dia指向每个患者末尾的空单元格。

您帮助我管理var。感谢。