駐車場の駐車スペースを追跡するための約1400行のシートがあります。これまでのところ、助けを借りて、サイドバーを開き、検索ボックスを作成し、「検索」ボタンと「閉じる」ボタンを追加することができました。現在、[検索]ボタンをクリックすると、検索ボックスのスペース番号を取得しておらず、スクリプトとも通信していないように見えます。
私の質問は、検索ボックスから情報を取得し、列Bを調べて一致するものを探し、その行の列BGから情報を取得して、次の形式で情報を返す方法です。
関数searchInfoがエラーを出しているというデバッグと資金提供を行いました:範囲の座標または寸法が無効です。(28行目、ファイル「サイドバー」)rowWithSpaceNumberが-1を返しているため。SpaceNumberが検索ボックスから情報を取得できるようになると、このエラーが修正されると思います。
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>
私によると、これに失敗する理由は2つあります。
まず、表示する理由-1
は、スプレッドシートで渡された値が見つからないためです。
第二に、あなたの渡された値のデータ型は次のようになりますstring
、とのあなたの値のデータ型theRowValues
IS object
。そのため、スプレッドシートで使用可能なデータを渡しても、比較中に2つの異なるタイプがあるため、常に失敗します。
このタイプのエラーを解決するには、
変更theRowValues.push(values[i])
あなたの行を次のようにsidebar.gs
、
theRowValues.push(Utilities.formatString("%s", values[i]));
これにより、スプレッドシートのデータがobject
データ型からデータ型に変換されますstring
。
これを行った後でも、スプレッドシートのエラーを処理する必要があります。
spreasdheetで使用できないデータを渡した場合、コードはの値-1
を返します。-1は行の有効な値ではないrowWithSpaceNumber
ため、エラーが発生しvar theRowData = sheetWithData.getSheetValues(rowWithSpaceNumber, 2, 1, 6);
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加