0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Google Sheets API] セルをコピペ(コピー&ペースト)、カピぺ(カット&ペースト)する

Last updated at Posted at 2024-02-19

Google Sheets API v4(Java)を使用して、
スプレットシートのセルをcopy and pasteまたはcut and pasteする方法
についてご紹介します。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する
を参照ください。

例:requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定

その他のGoogle Sheets APIは、下記の記事を参照ください。
⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた

No 目次
1 セルのコピペ(copy and paste)
2 セルのカピぺ(cut and paste)

1. セルのコピペ(copy and paste)

指定したセルの範囲をコピー&ペーストします。
コピーするシート、ペーストするシートは異なるシートでも可能です。
また、特殊貼り付けや、貼り付け(ペースト)の際に行、列を転置して貼り付けることもできます。

setPasteOrientationで貼り付け方法を指定できます。

type 内容
normal 通常の貼り付け
transpose 転地して貼り付け

setPasteTypeで特殊貼り付けを指定できます。

type 内容
PASTE_NORMAL 通常の貼り付け
PASTE_VALUES 値のみを貼り付け
PASTE_FORMAT 書式のみ貼り付け
PASTE_FORMULA 数式のみ貼り付け
PASTE_CONDITIONAL_FORMATTING 条件付き書式のみを貼り付け
PASTE_DATA_VALIDATION データ入力規制のみ貼り付け
PASTE_NO_BORDERS 枠線を除くすべてを貼り付け

コピー、ペーストする範囲の指定は終了行、列を省略することもできます。
 ・終了行(setEndRowIndex)を省略した場合、
   setStartRowIndexから最後の行まで(空白セルまで)
 ・終了列(setEndColumnIndex)を省略した場合、
   setStartColumnIndexから最後の列まで(空白セルまで)

コピー範囲 < ペースト範囲 の場合
 貼り付けの際、コピーの範囲が繰り返しで貼り付けられます。
 (スプレットシートを手操作した場合と同じ動きになります)

コピー範囲 > ペースト範囲 の場合
 貼り付けの際、コピー範囲の方が有効になり、ペーストの範囲指定(開始位置以外)は無視されます。

サンプル コード

public Request copyPaste(Integer sheetId) {
    Request request = new Request();

    GridRange src = new GridRange();	//コピーする範囲
    src.setSheetId(sheetId); 			//シートID
    src.setStartRowIndex(1); 			//開始行(0スタート)
    src.setEndRowIndex(5); 				//終了行(1スタート)
    src.setStartColumnIndex(1); 		//開始列(0スタート)
    src.setEndColumnIndex(5); 			//終了列(1スタート)
    
    GridRange dest = new GridRange();	//ペーストする範囲
    dest.setSheetId(sheetId); 			//シートID
    dest.setStartRowIndex(5); 			//開始行(0スタート)
    dest.setEndRowIndex(9); 			//終了行(1スタート)
    dest.setStartColumnIndex(5);	 	//開始列(0スタート)
    dest.setEndColumnIndex(9); 			//終了列(1スタート)

    CopyPasteRequest r = new CopyPasteRequest();
    r.setSource(src); 					//コピー範囲の情報設定
    r.setDestination(dest); 			//ペースト範囲の情報設定
    r.setPasteOrientation("normal");	//貼り付けの仕方。normal:通常, transpose:転地して貼り付け	
    //r.setPasteType("PASTE_VALUES");	//特殊貼り付け

    request.setCopyPaste(r);
    return request;
}

実行結果
指定した範囲のセルがコピーされました。

2. セルのカピぺ(cut and paste)

指定したセルの範囲をカット&ペーストします。
カットするシート、ペーストするシートは異なるシートでも可能です。
また、特殊貼り付けやもできます。コピペと異なり転地貼り付けはできません。

setPasteTypeで特殊貼り付けを指定できます。

type 内容
PASTE_NORMAL 通常の貼り付け
PASTE_VALUES 値のみを貼り付け
PASTE_FORMAT 書式のみ貼り付け
PASTE_FORMULA 数式のみ貼り付け
PASTE_CONDITIONAL_FORMATTING 条件付き書式のみを貼り付け
PASTE_DATA_VALIDATION データ入力規制のみ貼り付け
PASTE_NO_BORDERS 枠線を除くすべてを貼り付け

カットする範囲の指定は終了行、列を省略することもできます。
 ・終了行(setEndRowIndex)を省略した場合、
   setStartRowIndexから最後の行まで(空白セルまで)
 ・終了列(setEndColumnIndex)を省略した場合、
   setStartColumnIndexから最後の列まで(空白セルまで)

サンプル コード

public Request cutPaste(Integer sheetId)  {
    Request request = new Request();

    GridRange src = new GridRange();	//カットする範囲
    src.setSheetId(sheetId); 			//シートID
    src.setStartRowIndex(1); 			//開始行(0スタート)
    src.setEndRowIndex(5); 				//終了行(1スタート)
    src.setStartColumnIndex(1); 		//開始列(0スタート)
    src.setEndColumnIndex(5); 			//終了列(1スタート)

    GridCoordinate dest = new GridCoordinate();	//ペーストする範囲
    dest.setSheetId(sheetId); 			//シートID
    dest.setColumnIndex(6); 			//座標の列インデックス。(0スタート)
    dest.setRowIndex(6); 				//座標の行インデックス。(0スタート)
    
    CutPasteRequest r = new CutPasteRequest();
    r.setSource(src); 					//カット範囲の情報設定
    r.setDestination(dest); 			//ペースト範囲の情報設定
    //r.setPasteType("PASTE_FORMAT");	//特殊貼り付け
    
    request.setCutPaste(r);

    return request;
}

実行結果
指定した範囲のセルが切り取られ、指定箇所に貼り付けされました。

おしまい。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?