質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1541閲覧

[Google Apps Script] Googleスライドで同じテキストボックス内で、フォントサイズを変更したい。

jinyo

総合スコア59

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2020/07/02 00:00

#経緯
お世話になります。
SlideAppをGoogleAppsScriptで操作しています。
あるスライドを渡すと、そのスライド内の全テキストボックスの文字列を翻訳して、(翻訳前テキスト+翻訳後テキスト)としてテキストボックスに戻す、というスクリプトを作っています。

#解決したいこと

翻訳前テキスト+翻訳後テキストを同じテキストボックスにセットするのですが、
翻訳語テキスト部分だけのフォントサイズですとか、背景色を変えたいのですがうまくいきません。

javascript

1//イメージ 2 var textBefore = "こんにちは、世界。"; 3 var textAfter = "Hello,World."; 4 shape.getText().setText(textBefore + "\n" + textAfter); 5//ここでtextAfter部分の文字列だけFontstyleを変更したい。 6

フォントサイズを変更しようとするとテキストボックス全部に変更が適用されてしまいます。
ひとつのテキストボックス内で、Fontstyleを変える方法をご教示頂けたらと思います。
何卒宜しくお願い致します。

###画像
入力スライド
イメージ説明

出力スライド・求める結果
![イメージ説明

###現在のコード

現在の下記コードですとテキストボックス内のフォントサイズが12で統一されてしまいます。

Javascript

1 var presentation = SlidesApp.getActivePresentation(); 2 var slides = presentation.getSlides(); 3 4 slides.forEach(function(slide){ 5 shapes = slide.getShapes(); 6 shapes.forEach(function(shape){ 7 var rangeA = shape.getText(); 8 var textBefore = rangeA.asString(); 9 var textAfter = LanguageApp.translate(textBefore, "ja", "en"); 10 rangeA.setText(textBefore + "\n" + textAfter); 11 rangeA.getTextStyle().setFontSize(12); 12 }) 13 })

自分でやったこと

shape.getText()のあと、getParagraph();して改行単位でテキストを扱おうとしましたができませんでした。
getText()でTextrange配下のオブジェクトの階層構造がよくわかっていない故に悩んでいると思うのですが、その辺も含めてご教示いただければ幸いです。宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TextRange オブジェクトに appendTextinsertTextした戻り値の TextRange にスタイルを設定してやればいいようです。
次のようなコードでページ上の1個だけ配置したテキストボックスに異なるスタイルの文字列を追加できました。

GoogleAppsScript

1function myFunction() { 2 const presentation = SlidesApp.getActivePresentation(); 3 4 presentation.getSlides().forEach(slide => { 5 slide.getShapes().forEach(shape => { 6 const range = shape.getText(); 7 8 const originalText = range.asString().trim(); 9 const translatedText = LanguageApp.translate(originalText, "", "en"); 10 11 const appendedTextRange = range.appendText("\n" + translatedText); 12 13 const style = appendedTextRange.getTextStyle(); 14 style 15 .setForegroundColor("#808080") //グレー 16 .setFontSize(10); 17 }); 18 }); 19}

投稿2020/07/02 08:24

draq

総合スコア2573

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

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

jinyo

2020/07/02 14:42

ご提示いただいた方法で解決致しました。本当にありがとうございます! appendTextの戻り値がTextRangeだったのですね。この戻り値を利用することでFontStyleを分けることが出来ると。FontStyleはTextRangeの下にあるオブジェクトということが良く理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問