2016-09-28 67 views
0

这是我第一次来这里。 20年前我曾在Turbo Pascal和一些数据库管理方面进行过编程,然后我进入了医学院。变量不能设置

我正在管理必须由某些治疗师看到的患者电子表格。我每周在Google Spreadsheets上制作一张表格,形成一个日历。有16个时间专栏和5个每组6个行,分别为5天和6个治疗师。这些单元格包含患者姓名,并根据第一列中填写的名称列表进行验证。电子表格本身计算每个患者有多少次会话。

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

每次迭代后都会与之前的匹配进行比较:如果一天不匹配,则会以粗体显示新的一天。如果匹配,它只会打印时间。它从电子表格的最后一列获取日期(姓名和电话号码),将日期变为更清晰的格式。

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

我曾尝试用var diaprevio=""var diaprevio = 0var diaprevio = diaprevio+diapreviovar diaprevio = dia.getvalue()+1甚至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 
    } 
} 

我希望对解决这个问题的任何帮助。我认为在这种我仍然不知道的脚本中存在可变管理的问题。

非常感谢。

+0

您正在对同一变量进行多个变量声明。我看到'diaprevio'正在多次宣布。你可以在函数的顶部声明一个变量,并且不要为同一个变量名使用'var'关键字两次。你可以声明一个变量而不给它赋值:'var diaprevio;'在这个例子中值将是'undefined'。你可以用一个'var'关键字声明多个变量。 'var activ,coincidencia,dia,diaprevio,planning,sheet;'你可以在第一行声明所有这些变量,并且绝对不要再对它们中的任何一个使用'var'。 –

回答

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 
    } 
} 
+0

谢谢。由于我在互联网上读过的例子来学习这种脚本语言,我对这个变量的定义进行了过分的重述。我最后做的事情是在九十年代的Turbo C和Turbo Pascal中。 它的工作原理,不幸的是错误不断发生。不知何故_diaprevio_不接受新的价值。我试图让调试器工作,并按照变量,但它不。 – mipial

+0

我的意思是,'diaprevio'不接受'dia.getValue()'以外的新值。可能它与'for'loop有关吗?由于大多数患者在本周晚些时候结束并且很早就开始,我发现它很少出现:我在两个月后对患者使用脚本后发现它,患者在周三同一个患者完成后的周三开始。 – mipial

+0

我认为'for'循环有一些事情要做:如果我在'diaprevio = dia.getValue()'的下方设置了'diaprevio = 1',那么函数就会分解并重复每一次输入的日期(结果是日期以粗体显示,次日下次,次日再次以粗体显示)。但是如果我在'for(b = 1; b <18; b ++)'循环的外部设置了'diaprevio = 1',即使它在'for(a ...'循环中也没有任何反应,在这种情况下,输出 – mipial

0

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

您已帮助我管理var。谢谢。

+0

我建议你发布你的工作代码并将你的答案标记为正确,你可以帮助有类似问题的人。 – HardScale