0

나는 주차 공간을 추적 할 수있는 약 1400 개의 행을 가진 시트가 있습니다. 지금까지 도움말을 통해 사이드 바를 열고 검색 상자를 만들고 "검색"및 "닫기"버튼을 추가 할 수있었습니다. 현재 "검색"버튼을 클릭하면 검색 창에서 공간 번호를 가져 오지 않고 스크립트와 통신하지 않는 것처럼 보입니다.Google 스프레드 시트 사이드 바에 맞춤 검색 만들기

    :

    내 문제는 내가 그 행의 열 BG의 정보를 잡고, 다음과 같은 형식으로 정보를 반환, 검색 상자에서 정보를 얻을 일치하는 열 B를 통해 볼 수있는 방법입니다

  • 칼럼 B : colBInfo
  • 칼럼 C : colCInfo
  • 칼럼 D : colDInfo
  • 열 E : colEInfo
  • 칼럼 F : colFInfo
  • ,536,913,632 10
  • 열 G : colGInfo
  • 행 번호 : 범위의 좌표 또는 치수가 무효 : rowNumInfo

나는 searchInfo 오류를주고 함수 디버그 및 기금을 했어요. rowWithSpaceNumber가 -1을 리턴하기 때문에 (줄 28, 파일 "사이드 바"). 일단 theSpaceNumber가 검색 상자에서 정보를 가져올 수 있으면이 오류를 해결할 수 있다고 생각합니다.

Menu.gs

function onOpen() { 

    SpreadsheetApp.getUi() 
    .createMenu('Sidebar') 
    .addItem('Show Sidebar', 'showSidebar') 
    .addToUi(); 
} 

Sidebar.gs

function showSidebar() { 
var html = HtmlService.createHtmlOutputFromFile('index') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .setTitle('Individual Space Lookup'); 
SpreadsheetApp.getUi() 
    .showSidebar(html); 
SpreadsheetApp.getActiveSpreadsheet().toast('Sidebar opened', 'Status'); 
} 

function searchInfo(theSpaceNumber) { 
var ss =  SpreadsheetApp.openById("1isuunf_SRThXe8C71ROKAC2JvjZ49w05MrLE2323Yqk"); 
Logger.log("Book name: "+ ss.getName()); 
var sheetWithData = ss.getSheetByName("Master Sheet"); 
Logger.log("Sheet name: "+ sheetWithData.getName()); 
var numOfRowsInSheet = sheetWithData.getLastRow(); 
var values = sheetWithData.getSheetValues(4, 2, numOfRowsInSheet, 1); 
Logger.log("Values: "+ values); 


//Convert two dimensional array to one dimensional array. 
var theRowValues = []; 
for (var i = 0; i < values.length; i++) { 
theRowValues.push(values[i]); 
}; 

var rowWithSpaceNumber = theRowValues.indexOf(theSpaceNumber); 
Logger.log("rowWithSpaceNumber: " + theSpaceNumber); 

//Get 6 columns of data: getSheetValues(startRow, startColumn, numRows, numColumns) 
var colBInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 2, 1, 1); 
var colCInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 3, 1, 1); 
var colDInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 4, 1, 1); 
var colEInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 5, 1, 1); 
var colFInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 6, 1, 1); 
var colGInfo = sheetWithData.getSheetValues(rowWithSpaceNumber, 7, 1, 1); 
var rowNumInfo = sheetWithData.getRange(rowWithSpaceNumber, 2); 
Logger.log("Row Number: " + rowWithSpaceNumber); 

return app (colBInfo, colCInfo, colDInfo, colEInfo, colFInfo, colGInfo, rowNumInfo);  

}; 

index.html을

<div> 

    Search Individual Space: <input type="search" id="idUserInput"/> 

<BR> 

<input type="button" value="Search" 
onclick="getUserInput()" /> 

<input type="button" value="Close" 
onclick="google.script.host.close()" /> 


<script> 

function onSuccess(colBInfo, colCInfo, colDInfo, colEInfo, colFInfo, colGInfo, rowNumInfo) { 


    alert('Column B: ' + colBInfo 
    <br>'Column C: ' + colCInfo 
    <br>'Column D: ' + colDInfo 
    <br>'Column E: ' + colEInfo 
    <br>'Column F: ' + colFInfo 
    <br>'Column G: ' + colGInfo 
    <br>'Row Number: ' + rowNumInfo 

    ); 
} 

function getUserInput() { 
var theSpaceNumber = document.getElementById("idUserInput").value; 

google.script.run.withSuccessHandler(onSuccess) 
    .searchInfo(theSpaceNumber); 
    }; 

</script> 

</div> 
+0

var values ​​= sheetWithData.getSheetValues ​​(4, 2, numOfRowsInSheet, 1);': 마지막 열 번호가 무엇이든간에 1로 변경하십시오. – rpm

+0

@ user1989가 1에서 6으로 변경되면 시트의 모든 데이터가 1 ​​열만 검색하는 대신 입력 된 데이터를 검색합니다. 내가 가지고있는 가장 큰 문제는 검색 상자에 입력 한 데이터가 올바르게 상자에서 꺼내 지거나 호출되지 않는다는 것입니다. 상자에 입력 된 정보를 나머지 스크립트로 전달하는 방법에 대한 제안 사항은 무엇입니까? –

+0

GAS에 값을 전달하는 데 문제가없는 것 같습니다. 맞습니다. – rpm

답변

1

날에 따르면,이 실패 두 가지 이유가 있습니다.

먼저 -1이 표시되는 이유는 스프레드 시트에서 전달 된 값을 찾지 못했기 때문입니다.

두 번째로 전달 된 값의 데이터 유형은 string이고 theRowValues에있는 값의 데이터 유형은 object입니다. 따라서 비교되는 동안 두 가지 유형이 있기 때문에 스프레드 시트에서 사용 가능한 데이터를 전달하더라도 항상 실패합니다.

이것은 string 데이터 유형에 object 데이터 유형에서 스프레드 시트 데이터를 변환합니다

theRowValues.push(Utilities.formatString("%s", values[i])); 

, 당신의 sidebar.gs에 라인을 다음과 같이 이러한 유형의 오류,

변경 theRowValues.push(values[i])를 해결합니다.

이렇게 한 후에도 스프레드 시트에서 오류를 처리해야합니다. 당신이 당신의 spreasdheet에서 사용할 수없는 데이터를 통과 한 경우

은 행에 대해 유효한 값이 아닌 코드가 -1 var theRowData = sheetWithData.getSheetValues(rowWithSpaceNumber, 2, 1, 6);에서 오류가 발생하려고하는 rowWithSpaceNumber, 가치 -1을 반환합니다, 상상 해보세요.

+0

설명해 주셔서 감사합니다. 무효 공간 번호를 잡으려고 "입력 한 주차 공간이 유효한 공간이 아닙니다"라는 라인을 따라 무언가를 진술 할 오류 잡기를 추가 할 계획입니다. 다음으로, 데이터가 객체 또는 문자열 일 때 어떻게 알 수 있습니까? –

+0

'typeof (v)'는 데이터 유형 v를 제공합니다. – rpm