前提・実現したいこと
Googleドキュメントの文章を、
Googleスプレッドシートにつくった変換表に基づいて、
文字列を置換し、置換した文字列の背景色を変えたいと考えています。
変換表は2列100行ほど、
左に検索する文字、右に置換する文字を入れています。
また、上記の処理は、
同一のフォルダ内にあるいくつかのGoogleドキュメントファイル全てに処理するようにしたいと考えています。
発生している問題・エラーメッセージ
下記のコードでエラーが発生、ログも残りませんが、
なぜかフォルダ内の一つのファイルだけ置換、背景色付けの処理がされます。
無効な引数: searchPattern(行 16、ファイル「コード」)
並び変えたり削除したりして分かったのですが、
findTextや、replaceTextの第一引数に
tableValues[i][0]という書き方をするのがよくないようです。
以下の書き方でも同様にエラーが出ました。
for (var i in tableValues) { body.replaceText(tableValues[i][0],tableValues[i][1]);
どのように記述するのがよいのでしょうか。
該当のソースコード
GoogleAppsScript
1function myFunction() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheetTable = spreadsheet.getSheetByName("変換表"); 4 var tableValues = sheetTable.getRange(5,3,sheetTable.getLastRow(),2).getValues(); 5 6 var files =DriveApp.getFolderById('ここにIDを入れました').getFilesByType(MimeType.GOOGLE_DOCS); 7 while (files.hasNext()){ 8 var file = files.next(); 9 var url =file.getUrl(); 10 var body = DocumentApp.openByUrl(url).getBody(); 11 12 var result = null; 13 for (var i in tableValues) { 14 while (result = body.findText(tableValues[i][0],result)){ 15 var text = result.getElement().asText(); 16 text.setBackgroundColor(result.getStartOffset(), result.getEndOffsetInclusive(),'#FF8C00'); 17 //text.setUnderline(result.getStartOffset(), result.getEndOffsetInclusive(),true); 18 } 19 body.replaceText(tableValues[i][0],tableValues[i][1]); 20 } 21 } 22 Logger.log(body.getText()); 23}
試したこと
replaceTextの第一引数に入れる
tableValues[i][0]がよくないのだと思い、
RegExpを使ったものもやってみました。
こちらはエラーなく、
ログを見る限り3つのGoogleドキュメントファイルに処理を行おうとしているようですが、
置換も色変えもされません。
GoogleAppsScript
1function myFunction() { 2 var files =DriveApp.getFolderById('ここにIDを入れました').getFilesByType(MimeType.GOOGLE_DOCS); 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheetTable = spreadsheet.getSheetByName("変換表"); 5 var tableValues = sheetTable.getRange(5,3,sheetTable.getLastRow(),2).getValues(); 6 while (files.hasNext()){ 7 var file = files.next(); 8 var url =file.getUrl(); 9 var body = DocumentApp.openByUrl(url).getBody(); 10 Logger.log(body.getText()); 11 var str = body.getText() 12 var result = null; 13 for (var i in tableValues) { 14 var regExp = new RegExp( tableValues[i][0], "g" ) ; 15 str.replace(regExp,tableValues[i][1]); 16 }Logger.log(body.getText()); 17 } 18 } 19
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 02:00