ページ要素のサイズと位置を取得して変更する方法は 2 つあります。
- サイズと位置のゲッター関数とセッター関数を使用する。
- 固有のサイズを維持しながら、
getTransform()関数とsetTransform()関数を使用してアフィン変換を操作する。
ページ要素のプロパティを読み取る

図に示すように、回転がない場合、サイズと位置はレンダリングされたページ要素の境界ボックスを基準に測定されます。
- 左と上: ページの左上隅から、
回転していない境界ボックスの左上隅までの距離を測定します。値の読み取りには
getLeft()とgetTop()を使用します。 - 幅 と 高さ: 回転していない境界ボックスの幅と高さです。値の読み取りには
getWidth()とgetHeight()を使用します。 - 回転: 境界ボックスの中心を中心とした垂直線に対する時計回りの回転です。値の読み取りには
getRotation()を使用します。
長さはすべてポイント(pt)で測定されます。回転は度(°)で測定されます。
ページ要素のプロパティを設定する
ページ要素のサイズと位置は、insertShape() などの挿入メソッドを使用して作成するときに設定します。既存の図形の場合は、サイズ、位置、回転を設定できます。また、要素のスケーリングを設定して、サイズを変更したり、いずれかのエッジに沿って反転させたりすることもできます。
作成時
ページ要素を作成するときに、位置とサイズの情報を提供します。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
+ shape.getTop() + 'pt; Width: '
+ shape.getWidth() + 'pt; Height: '
+ shape.getHeight() + 'pt; Rotation: '
+ shape.getRotation() + ' degrees.');
上記のスクリプトでは、アクティブなプレゼンテーションの最初のスライドに、指定した位置とサイズで図形を作成し、図形の位置とサイズ情報を読み取ります。想定されるログは次のとおりです。
Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.
サイズ、位置、回転
作成後にページ要素のサイズと位置を更新します。
setLeft()とsetTop()を使用して、回転していない境界ボックスの左上隅の位置を設定します。setWidth()とsetHeight()を使用して、境界ボックスのレンダリングされた幅と高さを設定します。setRotation()を使用して、境界ボックスの中心を中心とした時計回りの回転を設定します。
次のスクリプトでは、アクティブなプレゼンテーションの最初のスライドに図形を作成し、セッターを使用して位置、サイズ、回転を更新し、図形の位置とサイズ情報を読み取ります。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
+ 'pt; Top: ' + shape.getTop()
+ 'pt; Width: ' + shape.getWidth()
+ 'pt; Height: ' + shape.getHeight()
+ 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');
想定されるログは次のとおりです。
Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.
サイズ、位置、回転のセッターは、任意の順序または組み合わせで使用できます。 上記のスクリプトの 3 行目を次のスクリプトに置き換えると、同じ結果になります。
shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);
ページ要素をスケーリングする
setWidth() と setHeight() を使用して図形のサイズを絶対値に設定する代わりに、scaleWidth() と scaleHeight() を使用して、相対的なスケーリング ファクタでページ要素を拡大または縮小できます。
shape.scaleHeight(0.5).scaleWidth(2);
次の図は、上記のコードが 45° 回転した正方形の図形でどのように機能するかを示しています。スケーリング中、境界ボックスの左上隅は固定されます。

ページ要素を反転させる
scaleWidth() と scaleHeight() の引数は負の値にできるため、ページ要素を水平方向または垂直方向に反転させることができます。
// Flip horizontally along the left edge of the bounding box.
shape.scaleWidth(-1);
// Flip vertically along the top edge of the bounding box.
shape.scaleHeight(-1);
次の図は、上記のコードが 45° 回転した図形でどのように機能するかを示しています。ページ要素は、境界ボックスの中心ではなく、いずれかのエッジに沿って反転します。

線の回転
他のページ要素と同様に、線の回転は線の垂直方向の角度ではなく、境界ボックスの回転です。始点と終点を指定して線を作成すると、回転は常に 0° になります。スライドの UI で線の終点をドラッグすると、垂直方向の角度と境界ボックスのサイズと位置は変わりますが、回転は変わりません。setRotation() を使用すると、線の境界ボックスが回転し、垂直方向の角度が効果的に変わります。そのため、2 つの線の垂直方向の角度が同じでも、境界ボックスが異なるため、サイズ、位置、回転の値が異なる場合があります。
制限事項
一部のサイズ設定と配置の方法は、一部の種類のページ要素と互換性がありません。次の表に、特定の種類のページ要素と互換性がないメソッドをまとめます。
| メソッド | シェイプ | 動画 | テーブル |
|---|---|---|---|
| getHeight(), getWidth() | ✔ | ✔ | いいえ(null を返します) |
| setHeight(), setWidth() | ✔ | ✔ | いいえ |
| setRotation() | ✔ | いいえ | いいえ |
| scaleHeight(), scaleWidth() | ✔ | ✔ | いいえ |
ページ要素にせん断がある場合、すべてのサイズ設定と配置の方法で予期しない結果が生じる可能性があります。すべての制限事項は変更される可能性があります。最新情報については、リファレンスをご確認ください。
アフィン変換を使用する
高度な制御を行う場合は、ページ要素のサイズと位置を、固有(ネイティブ)のサイズとアフィン変換を使用して計算して調整することもできます。
Google Apps Script には、アフィン変換を使用するための Google スライド API と同様のインターフェースが用意されています。
- プロパティを読み取るには、要素のスケーリング、回転、せん断、配置の方法を記述するアフィン変換を使用します。要素の変換と固有(ネイティブ)のサイズを使用してスライド上の視覚的なサイズを計算する方法については、
変換をご覧ください。Apps Script では、次のものを使用します。
- ページ要素の固有(ネイティブ)サイズには
getInherentWidth()とgetInherentHeight()。 - ページ要素のアフィン変換には
getTransform()。
- ページ要素の固有(ネイティブ)サイズには
- プロパティを変更するには、アフィン変換を使用して、スケーリング、回転、反転などを行います。アフィン変換を使用してページ要素のサイズと位置を設定する方法については、
サイズ設定と配置をご覧ください。Apps Script では、次のものを使用します。
- ページ要素のアフィン変換を設定するには
setTransform()(ABSOLUTE モードと同様)。 - ページ要素の現在の変換にアフィン変換を事前連結するには
preconcatenateTransform()(RELATIVE モードと同様)。
- ページ要素のアフィン変換を設定するには
次のスクリプトでは、図形を作成し、その変換を設定し、固有のサイズを読み取り、アフィン変換を読み取ります。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
.setScaleX(2)
.setScaleY(1)
.setTranslateX(100)
.setTranslateY(200)
.build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
+ 'pt; Inherent height: '
+ shape.getInherentHeight() + 'pt.');
想定されるログ出力は次のとおりです。
Inherent width: 236.2pt; Inherent height: 236.2pt.
結果の図形には、次の変換、レンダリングされたサイズ、位置が設定されます。
AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.