以下をやりたいと思っています。
・Spreadsheetに記載されたGoogleDocsのIDからGoogleDocsの内容を取得
・GoogleDocsの複製を作成する
・複製先のDocsから取得したテキストを改行毎に分ける
・分けられたテキストに対して、APIを実行し得られた結果を、複製先のDocsで置換する。
特定の文字列を覗いてうまく行っているのですが、以下のような文字列が入ってしまうと変換がうまく行きません。
・「DSSSSS(SSS)/SASDAFFSD」(replaceFirstのfindTextで無効な正規表現というエラー)
・「 」(replaceFirstでエラー)
どのように処理をすればよいか分からず教えていただけ無いかと思っております。
function createDocumentForWork() { //スプレッドシートを取得、シートを取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getActiveSheet(); //編集されたCell情報を取得 var activeCell = sheet.getActiveCell(); var activeCellValue = activeCell.getValue(); var activeRow = activeCell.getRow(); var activeColumn = activeCell.getColumn(); //アクティブセル(編集されたセル)が担当者の列以外の場合はスクリプトを終了 //※[列番号]は、A列なら1、Bなら2・・・という具合です if (activeColumn != 1) { return; } //アクティブセルが空欄の場合はスクリプトを終了 if (activeCellValue == "") { return; } //情報取得 var detail = sheet.getRange(activeRow, 1).getValue(); var templateFile = DriveApp.getFileById(detail); var OutputFileName = templateFile.getName()+'_TR'+Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH:mm:ss') var targetFolder = DriveApp.getFolderById("DDD"); var document = templateFile.makeCopy(OutputFileName, targetFolder); var documentUrl = document.getUrl(); var documentID = document.getId(); var aaaa = DocumentApp.openById(documentID) var docs = aaaa.getText() var ary = docs.split('\n'); var body = aaaa.getBody(); var filtered_ary = ary.filter(judge).filter(space); //一行ずつ投げる for( var i=0; i<filtered_ary.length; i++ ){ var payload={ "payload":{ "textSnippet":{ "content":filtered_ary[i], }, } }; var ret = JSON.parse(API(payload)) var ret = ret["payload"][0] replaceFirst(body,filtered_ary[i],ret);//replaceText(filtered_ary[i], "Ap"+[i]); } sheet.getRange(activeRow,4).setValue(documentUrl); } function judge(value) { var result = value.length > 2; return result; } function space(value) { if (value != '/ +/g') { result = value return result; } } // replaces the first occurrence of old function replaceFirst(body,old,replacement) { var found = body.findText(old); Browser.msgBox(found); if (found){ var start = found.getStartOffset(); var end = found.getEndOffsetInclusive(); var text = found.getElement().asText(); text.deleteText(start, end); text.insertText(start, replacement); } } function API(payload) { var payload_json = JSON.stringify(payload) var method = "POST" var url = "https://XXXX:predict"; var accessToken = "XXXXX"; // 入手したアクセストークン var headers = { "Authorization": "Bearer "+accessToken, "Content-Type": "application/json", }; var options = { 'method': method, 'headers': headers, 'payload': JSON.stringify(payload), }; var response = UrlFetchApp.fetch(url, options); return response; }
回答1件
あなたの回答
tips
プレビュー