🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

1311閲覧

setBackgroundColorの範囲指定がうまくいきません

TmuYw

総合スコア7

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/11/05 01:37

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
GASでスプレッドシートの語句のリストと一致した
ドキュメントの文字列の背景色を変更するシステムを作っています。
機能を実装中に以下のエラーメッセージが発生しました。
また,一致した文字列だけではなく,ドキュメント全体の背景色を変更してしまいます。
どうすれば,一致した文字列のみを変更できるでしょうか。

発生している問題・エラーメッセージ

TypeError: Text は関数ではありません。object です。

該当のソースコード

GAS

1 function test() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //1. 現在のスプレッドシートを取得 3 var sheet = spreadsheet.getActiveSheet(); //2. 現在のシートを取得 4 var range = sheet.getRange("B3"); //3. 指定するセルの範囲(A1)を取得 5 var value = range.getValue(); //4. 値を取得する 6 7 var document = DocumentApp.openByUrl(value);  //取得したURLを開く 8 var body = document.getBody(); //本文を取得 9 var text = body.getText(); 10 var asText = body.asText(); 11 12 var sheet2 = spreadsheet.getSheetByName("シート2"); 13 var range2 = sheet2.getRange("A1"); 14 var str = range2.getValue(); 15 var match = new RegExp(text.match(str), 'gm'); 16 var pos = 0; 17 var posN = 0; 18 while ((arr = match.exec(text)) !== null) { 19 Logger.log(arr); 20 posN = body.asText().getText().indexOf(str, pos); 21 if (posN !== -1) { 22 asText.setBackgroundColor("#FFFF00")(posN, posN + str.length - 1, true); 23 } 24 pos = match.lastIndex; 25 } 26}

試したこと

setBoldはできます。
setForegroundColorは一致したところだけではなく全体の文字色が変更されてしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

asText.setBackgroundColor("#FFFF00")(posN, posN + str.length - 1, true);
これを
asText.setBackgroundColor(posN, posN + str.length - 1,"#FFFF00");
こう

投稿2019/11/05 05:31

macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TmuYw

2019/11/07 02:47

ありがとうございました。解決しました。
guest

0

私はドキュメント関係詳しくないので正しい回答ができませんが、いくらか解った事もあるので回答します。

エラー文について

これは単純に、文面の問題っぽいです。
asText.setBackgroundColor("#FFFF00")(posN, posN + str.length - 1, true);
この部分、(posN, posN + str.length - 1, true)を消せばエラーはありませんでした。

全体の背景色が変わる事について

(posN, posN + str.length - 1, true)の文面は、スプレッドシートでいうところのgetRangeのような扱いでやりたかったのだと推察しますが、ドキュメントの場合は
.asText()での扱いになるみたいです。

現在の状態だと、
var text = body.getText();
var asText = body.asText();

そのあと
posN = body.asText().getText().indexOf(str, pos);

最終的に

asText.setBackgroundColor("#FFFF00")

となっていますが。

asText は var asText = body.asText();
になってます。

そして
var body = document.getBody()
ですので、

最終的な指示は
DocumentApp.openByUrl(value).getBody().setBackgroundColor("#FFFF00")

となっていて、結果的に全文背景色が変わったことになると思われます。


問題点の回答はしましたが、具体的にやりたい 対象の行のみを背景色にするのは
私は詳しくないのでわからないですが、

.getBody()したデータから、1行1行、改行してsearchをし、それをスプレッドシートでいうところのgetRangeができれば、どうにかできるんじゃないかとは思いますが、方法はわからない状況です。

以上、解決のヒントになれば幸いです。

追記

問題のヒントになる方法を一応見つけましたので貼ります。
これを今回のプログラムに組み込んでみてlogをみてみるとなにかのヒントになるかもしれません。
以上頑張ってください。

GAS

1var body = document.getBody().getParagraphs(); //本文を取得 2 3 for (var i = 0; i < body.length; i++) 4 { 5 var log = body[i].getText() 6 Logger.log(log) 7 if(log == "調べたい文字列") 8 { 9 Logger.log("↑これだよ!") 10 } 11 } 12}

投稿2019/11/05 02:54

編集2019/11/05 04:46
takaD

総合スコア315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TmuYw

2019/11/07 02:47

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問