実現したいこと
GASでQRコードから管理番号を取得し、データベースから対象の行を入力したいのですが、うまくいきません。
前提
管理番号(数字)が書かれたQRコードを、GASのWebアプリで作成したQRコードリーダーから読み取ります。
QRコードから番号を取得する部分は問題ないのですが、そこからデータベースに参照してデータを入力する部分ができません。
コード上で、仮にvar text = "1" と固定して実行した場合は、データベースの参照が正常に動作します。
該当のソースコード
Code.gs
1// QRコードからのスキャンデータを引数として受け取る関数 2function onScan(rawText) { 3 4 // 引数で受け取ったデータを強制的に文字列に変換 5 var text = String(rawText); 6 7 // データを書き込むスプレッドシートとシートを取得 8 var appendSheetName = "Main"; 9 var appendSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 10 var appendSheet = appendSpreadsheet.getSheetByName(appendSheetName); 11 12 // スキャンデータ(管理番号)をシートに追記 13 appendSheet.appendRow([text]); 14 15 // データベースのスプレッドシートとシートを取得 16 var databaseSpreadsheetId = 'データベースシートのID'; 17 var databaseSheetName = 'DB'; 18 var databaseSpreadsheet = SpreadsheetApp.openById(databaseSpreadsheetId); 19 var databaseSheet = databaseSpreadsheet.getSheetByName(databaseSheetName); 20 21 // データベースの全データを取得 22 var data = databaseSheet.getDataRange().getValues(); 23 24 // スキャンデータ(管理番号)に一致する行を検索 25 var targetRow; 26 for (var i = 0; i < data.length; i++) { 27 if (data[i][0].toString() === text.trim()) { // ここでデータベースの管理番号も文字列に変換して比較 28 targetRow = data[i]; 29 break; 30 } 31 } 32 33 // 該当する行が見つかった場合、そのデータをシートに追記 34 if (targetRow) { 35 appendSheet.appendRow(targetRow); 36 } 37}
index.html
1<!DOCTYPE html> 2<html> 3 4<head> 5 <base target="_top"> 6</head> 7 8<body> 9 <div id="reader" style="width:340px;"></div> 10 <button type="button" onclick=google.script.run.reset() >リセット</button> 11 <div id="result"></div> 12 <script src="https://unpkg.com/html5-qrcode"></script> 13 <script> 14 let CURRENT_TEXT = ''; 15 16const append = (text) => { 17 document.querySelector('#result').innerHTML += `${text}<br>`; 18}; 19 20 21const onScanSuccess = (decodedText, decodedResult) => { 22 console.log('onScanSuccess', decodedText, CURRENT_TEXT); 23 if (CURRENT_TEXT !== decodedText) { 24 CURRENT_TEXT = decodedText; 25 append(decodedText); 26 beep(); 27 google.script.run 28 .withFailureHandler(function (error) { 29 append(`"${decodedText}"の保存に失敗しました: ${error}`); 30 }) 31 .onScan(decodedText); 32 } 33}; 34 35const html5QrcodeScanner = new Html5QrcodeScanner("reader", { fps: 10, qrbox: 240 }); 36html5QrcodeScanner.render(onScanSuccess); 37 38以下略
試したこと
管理番号のデータ型が数値か文字列かが原因と仮説し、管理番号をAにして同じように検証しましたが、結果は変わりませんでした。
0 コメント