2016-09-28 11 views
0

ここは初めてのことです。私はTurbo Pascalで20年前にプログラムを作成していましたが、一部のデータベース管理では、Med Schoolに入学しました。変数を設定することはできません

私は特定のセラピストに見えなければならない患者のスプレッドシートを管理しています。 Googleスプレッドシートで毎週1枚、カレンダーとして作成します。 5日間、6人のセラピストのために、それぞれ16の時間の列と6つの行の5つのグループがあります。セルは患者の名前を保持し、最初の列の下に記入されている名前のリストに対して検証されます。スプレッドシート自体は、各患者のセッション数を数えます。

2番目の部分は、すべての患者、毎日、1時間ごと、そしてすべてのセラピストが実行する小さなプログラムです。患者の名前が一致すれば、その日を太字で表示し、その後時間を表示し、その後セラピストと予約します。

各反復の後、以前の一致と比較されます。一致しない場合は、新しい日が太字で印刷されます。一致した場合は、時間だけが表示されます。スプレッドシートの最後の列から曜日(名前と番号)を取得すると、各日の日付がわかりやすくなります。

私の問題は次のとおりです。患者が終了する前の患者と同じ日に開始するたびに、変数が一致し、その日は書き込まれません。

私はvar diaprevio=""var diaprevio = 0var diaprevio = diaprevio+diapreviovar diaprevio = dia.getvalue()+1とさえdelete diaprevioを使用することにより、変数(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'になります。 1つの 'var'キーワードで複数の変数を宣言することができます。 'var active、coincidencia、dia、diaprevio、planning、sheet;'すべての変数を最初の行に宣言し、それらの変数に 'var'を再び使用することはできません。 –

答えて

0

varのすべてのキーワードをforループから抽出するように関数を編集しました。

これを試して、動作するか確認してください。

/* 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

ありがとうございます。私はこのスクリプト言語を学ぶためにインターネットで読んだ例のため、この変数の定義を覆しました。私が最後にしたのは90年代のターボCとターボパスカルでした。 残念ながら、エラーは起こり続けます。何とか_diaprevio_は新しい値を受け入れません。デバッガを動作させて変数に従わせることを試みましたが、それはしません。 – mipial

+0

つまり、 'diaprevio'は' dia.getValue() '以外の新しい値を受け入れません。 'for'loopと関係がありますか?ほとんどの患者が週末に終わり、早期に開始することを考えると、バグはほとんど見られません。同じ水曜日に終了した患者の後に水曜日に始まる患者のスクリプトを使用して2ヶ月後にそれを見つけました。 – mipial

+0

私は 'for'ループに何かがあると思います:' diaprevio = dia.getValue() 'の直下に' diaprevio = 1'を設定すると、関数は分解され、毎回の入力時にその日を繰り返します太字で、その日の翌日、翌日に再び太字で)。しかし、 'for(b = 1; b <18; b ++)'ループの 'diaprevio = 1'を外に設定した場合、' for(a ... 'ループの内部にあっても何も起こりません。 – mipial

0

ありがとうございました。リセットしなければならない変数がdiaprevioではなくdiaであることがわかりました。 diaprevioは各反復で同じdiaで更新されていたので、私はdiaをすべての患者の最後の空のセルに指していました。

あなたはvarの管理を手伝ってくれました。ありがとう。

+0

あなたの作業コードを投稿し、あなたの答えを正しいものとしてマークすることをお勧めします。あなたと同じような問題を抱えている人を助けるかもしれません。 – HardScale

関連する問題