2016-09-28 75 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