0

우선 포기 : 필자는 합리적인 경험을 가진 프로그래머이지만 Javascript는 매우 녹슨하고 Google Script는 아주 새롭다. 스프레드 시트의 모든 시트를 통한 간단한 검색

나는

  1. 가 주어진 번호 (태그) 각 시트에 지정된 열을 검색하는 함수를 작성하는 것을 시도하고있다. 는 그 번호를 찾으면
  2. 함수가 "= 부모로서 세포 (체결 될 문자열
  3. 복귀 (그것을 셀 값을) 완성 된 문자열

에서 주변 셀로부터의 다른 정보를 저장할 태그) "정보를 사냥하고 수동으로 복사하는 번거 로움을 덜어줍니다.

몇 가지 다른 질문을 살펴 보았습니다. 아래 소스에 대한 내 의견을 참조하십시오.

How do I search Google Spreadsheets? -이 질문에 대한 첫 번째 답변은 간단했지만 Google 스크립트 관련 코드를 통합하지 않았습니다.

Find value in spreadsheet using google script -이 솔루션은 비슷한 솔루션을 찾는 것처럼 보였으므로 첫 번째 대답에서 코드를 적용하려고 시도했습니다. 다음은

가 작동합니다 것처럼 그것은 보인다 소스 2에서 내 적응 코드입니다,하지만 난 그것을 실행할 때 오류가 발생하는,

TypeError: Cannot read property "0" from undefined. (line 19).

TLDR는 : 나를 통해 검색이 코드를 수정 도와주세요 스프레드 시트. 19 번 줄에 오류가 있습니다.

수정 : 내 질문 끝에 올바른 코드를 추가했습니다. 내가이 컴파일러 버릇에 비난합니다 :)

function parent(tag) { 
    var sh = SpreadsheetApp.getActiveSpreadsheet(); 
    var titleRow = 6; 
    var parentRow = 0; 

    //create array with sheets in active spreadsheet 
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 

    //loop through sheets to look for value 
    for (var i in sheets) { 

    SpreadsheetApp.setActiveSheet(sheets[i]) 
    var sheet = sh.getActiveSheet(); 
    var data = sheets[i].getDataRange().getValues(); 


    //loop through data on sheet 
    for (var r=1;r<=data.length;++r) { 
    if(typeof(data[r][0])!=="undefined") { //<-- This is where the error occurs 
     if (data[r][0] == tag) { 
     parentRow = r; 

     // Populate Genes 
     var result = "#" + tag + "("; 
     var z = 0; 
     for (var j=8; j<12; j++) { 
      if (data[titleRow][j] == "Genotype") { 
      if (z==0) { 
       result = result + data[titleRow-1][j]; 
       z=1; 
      } 
      else { 
       result = result + "-" + data[titleRow-1][j]; 
      } 
      } 
     } 
     result = result + ") "; 

     // Populate Genotype 
     var z = 0; 
     for (var j=8; j<12; j++) { 
      if (data[titleRow][j] == "Genotype") { 
      if (z==0) { 
       result = result + "" + data[dataRow][j]; 
       z=1; 
      } 
      else { 
       result = result + "/" + data[dataRow][j]; 
      } 
      } 
     } 
     // result = result + " " + dataRow; 
     return result; 
     } 
     } 
    } 
    } 
} 

을 신인 실수, 다음 (문제를 일으키는 된 이름이 변수 포함) 수정 된 코드입니다.

function parent(tag) { 
    var sh = SpreadsheetApp.getActiveSpreadsheet(); 
    var titleRow = 6; 
    var dataRow = 0; 

    //create array with sheets in active spreadsheet 
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 

    //loop through sheets to look for value 
    for (var i in sheets) { 

    SpreadsheetApp.setActiveSheet(sheets[i]) 
    var sheet = sh.getActiveSheet(); 
    var data = sheets[i].getDataRange().getValues(); 


    //loop through data on sheet 
    for (var r = 0; r < data.length; r++) { //<-- Here's the fix 
    if(typeof(data[r][0])!=="undefined") { 
     if (data[r][0] == tag) { 
     dataRow = r; 

     // Populate Genes 
     var result = "#" + tag + "("; 
     var z = 0; 
     for (var j=8; j<12; j++) { 
      if (data[titleRow][j] == "Genotype") { 
      if (z==0) { 
       result = result + data[titleRow-1][j]; 
       z=1; 
      } 
      else { 
       result = result + "-" + data[titleRow-1][j]; 
      } 
      } 
     } 
     result = result + ") "; 

     // Populate Genotype 
     var z = 0; 
     for (var j=8; j<12; j++) { 
      if (data[titleRow][j] == "Genotype") { 
      if (z==0) { 
       result = result + "" + data[dataRow][j]; 
       z=1; 
      } 
      else { 
       result = result + "/" + data[dataRow][j]; 
      } 
      } 
     } 
     // result = result + " " + dataRow; 
     return result; 
     } 
     } 
    } 
    } 
} 

답변

2

문제 배열 인덱스 그래서 2 data.length입니다 인덱스 0으로 배열 수단 0에서 시작한다. 오류의 다음

for(var i=0; i < data.length ;i++) 

설명에 루프에 대한 귀하의 수정 시도 : 루프에서 코드는 따라서이 정의되어 할당 된 배열 값의 외부 접근을 시도하고 있습니다.

편집 : 내가 말하는 것에 대해 조금 더 설명해주십시오. 그래서 "data.length 2는 인덱스 0,1을 갖는 배열을 의미합니다"라고 말하면서, 다음과 같은 비교 연산자를 사용하여 for 루프를 가리키는 것입니다. < = data.length는 값이 i = 2가되도록합니다. 최종 반복. 그러나 길이 2의 배열에는 2의 인덱스가 없습니다. 바라건대, 이것은 전달하려는 것을 명확하게 해줍니다.

+0

좋아요. 행 = 2에서 시작하므로 I = 1에서 시작하겠습니다. 그러나 비교 연산자를 '<='에서 '<'로 변경 했습니까? –

관련 문제