Help us understand the problem. What is going on with this article?

GAS で Googleドキュメントを操作する。

この記事について

GASでGoogleドキュメントを操作する時の良く使う構文の個人的メモ。随時更新中。

基本構文

DocumentAppの下にbodyがあって、Paragraph(パラグラフ:段落)がある。Paragraphの中に文章(text)だったり、表だったり画像がある。

基本的にテキストの操作はParagraph単位で行う

ドキュメントを開く

//Googleドキュメントを開く
var doc = DocumentApp.openById("ID");
var doc = DocumentApp.openByUrl("url");

テキストを編集する

var paragraphs = body.getParagraphs();
var p1 = paragraphs[0]

//段落にテキストを挿入する。
p1.insertText( 0, "text" );
//段落にテキストを追加する。
p1.appendText("text");

ドキュメントを保存する

Goolgeドキュメントは基本的に即自的に変更が確定されるが、GASで操作する時はsaveしないと変更が確定しないことがあるので変更したら明示的に保存した方が良い。

  var doc = DocumentApp.openById(file.id);
  doc.saveAndClose();

実例

指定のフォルダに新規Googleドキュメントを作成する

  var folder = DriveApp.getFolderById("folderId"); 
  var doc = DocumentApp.create("doc name");
  var docFile = DriveApp.getFileById(doc.getId()); 
  folder.addFile(docFile);

文章の最後に文章を追記する

  var body = DocumentApp.getActiveDocument().getBody();

  body.appendPageBreak();//ページ区切りを入れる
  body.appendParagraph("hogehoge");//段落をアペンドする

文章の最初に文章を挿入する

  var body = DocumentApp.getActiveDocument().getBody();
  body.insertParagraph(0, "hogehoge"); //段落番号を0が文章の最初

段落ごとに処理する

  //段落ごとに翻訳してみる。
  var body = DocumentApp.getActiveDocument().getBody();
  var paragraphs = body.getParagraphs();
  var textBefore ; // 翻訳前テキスト
  var textTranslated ; // 翻訳後テキスト
  paragraphs.forEach( p => {
    textBefore = p.getText();
    if (textBefore != ""){
      textTranslated = LanguageApp.translate(textBefore, "ja", "en");
      p.setText(textTranslated);
    };

表を差し込む

function createDoc() {
  var doc = DocumentApp.create('Sample Document');
  var body = doc.getBody();
  var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']];
  body.insertParagraph(0, doc.getName())
      .setHeading(DocumentApp.ParagraphHeading.HEADING1);
  table = body.appendTable(rowsData);
  table.getRow(0).editAsText().setBold(true);
}

文字列置換・テンプレート文章の置換

テンプレートを用意しておき、文字列置換で文章を作成する時に便利

/*
/テンプレートとなるGdocファイル新規作成する
*/
function createTemplate() {
  var body = DocumentApp.getActiveDocument().getBody();
  //置換用文字列
  body.appendParagraph('{name}');
  body.appendParagraph('{address}');
  body.appendParagraph('{city} {zip}');
}

/*
/上で作成したテンプレートの置換用文字列を指定の文字列に置換する
*/
function searchAndReplace() {
  var body = DocumentApp.getActiveDocument()
      .getBody();
  var client = {
    name: 'お客様 タロウ',
    address: '新宿',
    city: '東京',
    zip: 'xxx-xxxx'
  };

  body.replaceText('{name}', client.name);
  body.replaceText('{address}', client.address);
  body.replaceText('{city}', client.city);
  body.replaceText('{zip}', client.zip);
}

現在のカーソル位置に文章を挿入する

  var doc = DocumentApp.getActiveDocument();
  doc.getCursor().insertText(text);
  //getcusorはアクティブドキュメントにしか使用できない

ファイル名操作

  var doc = DocumentApp.getActiveDocument();
  doc.getBlob().getName(); //拡張子あり。
  doc.getName(); //上と一緒。拡張子なし。

sethedding midash

参考

jooji
業務効率化アプリなんかを作っています。 GoogleAppsScript | Python | Flask | JavaScript | Vue.js | Electron | VBA | Powershell の記事を収集するのが好き。記事へのご指摘ありがたいです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした