Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

ラベル Google Document の投稿を表示しています。 すべての投稿を表示
ラベル Google Document の投稿を表示しています。 すべての投稿を表示

2024年11月11日月曜日

Googleドキュメントに見出しを追加したい


今回の例では、ドキュメントの末尾に「見出しD」 を追加します。
見出しA, B, C, Dのスタイルは、見出し3 (HEADING3) に設定しています。 


下記Code.gsの GOOGLE_DOCUMENT_URL を設定して addHeadingToEnd() を実行すると、見出しDが追加されます。



Code.gs
function addHeadingToEnd() {
var docUrl = 'GOOGLE_DOCUMENT_URL';
var doc = DocumentApp.openByUrl(docUrl);
var body = doc.getBody();
body.appendParagraph('見出しD').setHeading(DocumentApp.ParagraphHeading.HEADING3);
}



Reference

Googleドキュメントの見出しを取得したい

Googleドキュメントの指定した位置にテキストを追加したい(特定の見出しセクションにテキストを追加する)

Googleドキュメントの見出しを取得したい


今回の例では、見出しA, 見出しB, 見出しC はテキストのスタイルを「見出し3」 (HEADING3) に設定しています。
テキスト1, テキスト2は「標準テキスト」です。



下記Code.gsの GOOGLE_DOCUMENT_URL を設定して testGetTargetHeadingText() を実行すると、
見出しA, 見出しB, 見出しC がログに出力されます。




Apps Script


Code.gs
// 使用例
function testGetTargetHeadingText() {
var docUrl = 'GOOGLE_DOCUMENT_URL';
var targetHeadingTexts = getTargetHeadingText(docUrl);
Logger.log(targetHeadingTexts.join(", "));
}

function getTargetHeadingText(docUrl) {
var doc = DocumentApp.openByUrl(docUrl);
var body = doc.getBody();
// 全ての段落を取得
var paragraphs = body.getParagraphs();
var targetHeadingTexts = [];
var targetHeading = DocumentApp.ParagraphHeading.HEADING3;
// 各段落のスタイルを確認して、target見出しのテキストを取得
paragraphs.forEach(function(paragraph) {
if (paragraph.getHeading() === targetHeading) {
targetHeadingTexts.push(paragraph.getText());
}
});

return targetHeadingTexts;
}


Reference

Googleドキュメントの指定した位置にテキストを追加したい(特定の見出しセクションにテキストを追加する)

2024年11月10日日曜日

Googleドキュメントの指定した位置にテキストを追加したい(特定の見出しセクションにテキストを追加する)


指定したGoogleドキュメント内の
見出しBセクションにある標準テキストに
一行追加したくて書いたコードです。


ChatGPTとGeminiと何度かやり取りしながら、プロンプトを書くのに試行錯誤しました。
途中で手動修正も入れつつ、動くコードが書けました。



Apps Script


Code.gs
function myFunction() {
var target = "見出しB";
var addText = "テキスト3";
appendTextToList(target, addText);
}

function appendTextToList(target, addText) {
var documentUrl = 'GOOGLE_DOCUMENT_URL';
var doc = DocumentApp.openByUrl(documentUrl);
var body = doc.getBody();

var paragraphs = body.getParagraphs();
var insertIndex = -1;
var standardTexts = [];

for (var i = 0; i < paragraphs.length; i++) {
var text = paragraphs[i].getText();

if (text === target && paragraphs[i].getHeading() == DocumentApp.ParagraphHeading.HEADING3) {
insertIndex = i;

// target配下にある標準テキストを取得
for (var j = i + 1; j < paragraphs.length; j++) {
var nextText = paragraphs[j].getText();
if (paragraphs[j].getHeading() == DocumentApp.ParagraphHeading.NORMAL && nextText !== '') {
standardTexts.push(nextText);
} else {
break;
}
}
break;
}
}
body.insertParagraph(insertIndex + (standardTexts.length + 1), addText);
}


Tips


見出し3の直下に追加したい場合は、標準テキストの取得は不要。

function myFunction() {
var target = "見出しB";
var addText = "テキスト3";
appendTextToList(target, addText);
}

function appendTextToList(target, addText) {
var documentUrl = 'GOOGLE_DOCUMENT_URL';
var doc = DocumentApp.openByUrl(documentUrl);
var body = doc.getBody();

var paragraphs = body.getParagraphs();
var insertIndex = -1;
for (var i = 0; i < paragraphs.length; i++) {
var text = paragraphs[i].getText();

if (text === target && paragraphs[i].getHeading() == DocumentApp.ParagraphHeading.HEADING3) {
insertIndex = i;
break;
}
}
body.insertParagraph(insertIndex + 1, addText);
}


Reference

Enum ParagraphHeading

2022年11月3日木曜日

Googleドキュメントのテキストの色を一括で変えたい


下記コード.gsの ID を変えて myFunction() を実行すると、ドキュメントのテキストの色を #d3d3d3 に変更できました。



コード.gs
function myFunction() {
  var url = "https://docs.google.com/document/d/ID/edit";
  var doc = DocumentApp.openByUrl(url);
  doc.editAsText().setForegroundColor('#d3d3d3');
}


参考

editAsText()

setForegroundColor(foregroundColor)

2022年8月15日月曜日

Google Driveで特定フォルダ内にあるファイルの説明をDocumentに書き出したい


Google Driveの特定フォルダ内にあるファイルの説明をすべて取得してドキュメントに書き出したくて書いたコードです。

書き出す順番はファイル名を昇順で並べ替えています。

実行プロセスの概要
  1. getFileDescriptionsInFolder() :フォルダを指定してファイルをすべて取得します
  2. fileObjArray.sort(asc):ファイル名の昇順で並べ替えます
  3. createDescriptionArray(sortedArray) :説明だけの配列を作ります
  4. descriptionsArray.join("\n") :配列を改行でつなげた文字列にします
  5. addTextToDocument(str) :指定したDocumentに書き出します



コード.gs
function addFileDescriptionsToDocument() {
  const fileObjArray = getFileDescriptionsInFolder();
  const sortedArray = fileObjArray.sort(asc);
  Logger.log(sortedArray);
  const descriptionsArray = createDescriptionArray(sortedArray);
  const str = descriptionsArray.join("\n");
  addTextToDocument(str);
}

function getFileDescriptionsInFolder() {
  const folderId = "FOLDER_ID";
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  let array = [];
  while(files.hasNext()) {
    const file = files.next();
    const obj = {};
    obj["name"] = file.getName();
    obj["url"] = file.getUrl();
    obj["description"] = file.getDescription();
    array.push(obj);
  }
  return array;
}

function asc(a, b){
  const targetA = a.name;
  const targetB = b.name;
  if(targetA > targetB){
    return 1;
  }else if(targetA < targetB ){
    return -1;
  }else{
   return 0;
  }
}

function createDescriptionArray(sortedArray) {
  const array = [];
  const target = "description";
  for(let i = 0; i < sortedArray.length; i++){
    const description = sortedArray[i][target];
    array.push(description);
  }
  return array;
}

function addTextToDocument(description) {
  const url = "DOCUMENT_URL";
  const doc = DocumentApp.openByUrl(url);
  const body = doc.getBody();
  body.appendParagraph(description);
}



参考

Google Driveのファイルの説明をフォルダ単位で取得したい

2022年5月8日日曜日

Google Apps Scriptでドキュメントに画像を配置したい(フォルダ内の複数画像)


Google Apps Scriptでドキュメントに画像を配置したい では、ひとつの画像をドキュメントに配置しました。

今回は、特定のフォルダ内にある画像を一気に配置したくて書いたコードです。

画像が大きく見えるように画像サイズは1.2倍にしました。



コード.gs
const docUrl = "https://docs.google.com/document/d/ID/edit";

const FOLDER_ID = "Google Drive FOLDER ID";

function insertImages() {
  const doc = DocumentApp.openByUrl(docUrl);
  const docBody = doc.getBody();
  const docWidth = docBody.getPageWidth();
  const docHeight = docBody.getPageHeight();
  const fileIds = getFileIds();
  for(let i = 0; i < fileIds.length; i++) {
    const image = DriveApp.getFileById(fileIds[i]);
    docBody.getParagraphs()[0].insertInlineImage(0, image)
                              .setWidth(docWidth*1.2)
                              .setHeight(docHeight*1.2);
  }
}

function getFileIds() {
  let fileIds = [];
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const files = folder.getFiles();
  while(files.hasNext()) {
    const file = files.next();
    const id = file.getId();
    fileIds.push(id);
  }
  return fileIds;
}



関連記事

Google Apps Scriptでドキュメントに画像を配置したい

2022年5月7日土曜日

Google Apps Scriptでドキュメントに画像を配置したい


Googleドライブにある画像ファイルをドキュメントに配置したくて書いたコードです。

画像の大きさがドキュメントのページ範囲に収まるように、getPageWidth, getPageHeightを使いました。



コード.gs
const docUrl = "https://docs.google.com/document/d/ID/edit";

const imageUrl = "https://drive.google.com/file/d/ID/view?usp=sharing";

const imageId = imageUrl.split("/d/")[1].split("/view?")[0]

const image = DriveApp.getFileById(imageId);

function myFunction() {
  const doc = DocumentApp.openByUrl(docUrl);
  const docBody = doc.getBody();
  const docWidth = docBody.getPageWidth();
  const docHeight = docBody.getPageHeight();
  docBody.getParagraphs()[0].insertInlineImage(0, image).setWidth(docWidth).setHeight(docHeight);
}


参考

insertInlineImage(childIndex, image)

Class InlineImage

Class Body

2019年9月5日木曜日

Googleドキュメント内のテキストを置換したい replaceText


DocumentApp.getActiveDocument().getBody()
でBodyを取得して

.replaceText(searchPattern, replacement)
で置換できるようです。



ドキュメント内に hello world という文字列があって


コード.gsの
body.replaceText("hello", "Hello")
でhello を Hello に置換できます。



コード.gs
function myFunction() {
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody();
  body.replaceText("hello", "Hello");
}
意訳
この機能がやること
ドキュメントを取得して
Bodyを取得して
hello を Hello に置換する



補足

  • 正規表現も使えるようです
  • 一致するすべてのsearchPatternがreplacementで置換されます
    • すべて置換


ドキュメント内に
hello world
hello world2
という文字列があるとき

コード.gsの
body.replaceText("hello", "Hello");
body.replaceText("hello.*", "Hi");
に書き換えて実行すると以下のようになります。


参考

replaceText(searchPattern, replacement)
https://developers.google.com/apps-script/reference/document/text#replaceText(String,String)

Class Body
https://developers.google.com/apps-script/reference/document/body
The Body may contain ListItem, Paragraph, Table, and TableOfContents elements. For more information on document structure, see the guide to extending Google Docs.

2019年5月2日木曜日

HtmlServiceのテキストエリアからGoogleドキュメントに書き込みたい


この記事でやること

GoogleドキュメントのテキストをHtmlServiceのテキストエリアに読み込みたい
でテキストエリアに読み込んだあとで

編集したテキストをドキュメントに反映させるところまで行きます。



コード.gs
function doGet(e) {
  return HtmlService.createHtmlOutputFromFile("index");
}

var docUrl = 'https://docs.google.com/document/d/ID/edit';
var docId = docUrl.split('/d/')[1].split('/')[0];

function getDocText() {
  var doc = DocumentApp.openById(docId);
  var body = doc.getBody().getText();
  return body;
}

function updateDocText(text) {
  var doc = DocumentApp.openById(docId);
  var body = doc.getBody();
  body.setText(text);
}




index.html
<!DOCTYPE html>
<html>
<body>
  <textarea id="ta" style="width: 20vw;height:90vh;"></textarea>
<script>
getData();

/************************************
elem(id)
************************************/
function elem(id) {
  return document.getElementById(id);
}

/************************************
getData()
************************************/
function getData() {
  google.script.run
  .withFailureHandler(onFailure)
  .withSuccessHandler(gotDocText)
  .getDocText();
}

/************************************
gotDocText(result)
************************************/
function gotDocText(result) {
  elem('ta').value = result;
}

/************************************
updateData()
************************************/
function updateData() {
  var text = elem('ta').value;
  google.script.run
  .withFailureHandler(onFailure)
  .updateDocText(text);
}


/************************************
onFailure(e)
************************************/
function onFailure(e) {
  alert([e.message, e.stack]);
}

/************************************
timeout
2秒後にupdateData()を実行する
************************************/
var timeOut;
var milisec = 2000;

document.addEventListener("load", timeoutStart);
document.addEventListener("click", resetTimeout);
document.addEventListener("mousemove", resetTimeout);
document.addEventListener("keypress", resetTimeout);

function timeoutStart(){
  timeOut = setTimeout('updateData()', milisec);
}

function resetTimeout() {
  clearTimeout(timeOut);
  timeoutStart();
}

</script>
</body>
</html>



GoogleドキュメントのテキストをHtmlServiceのテキストエリアに読み込みたい


このようなドキュメントがあって


HtmlServiceで作ったテキストエリアに表示したい




コード.gs
function doGet(e) {
  return HtmlService.createHtmlOutputFromFile("index");
}

function getDocText() {
  var url = 'https://docs.google.com/document/d/1MqQIPvp8NjFrCI8BOOUOMFWh1yXjuIebP1nx9iDoSCU/edit';
  var id = url.split('/d/')[1].split('/')[0];
  var doc = DocumentApp.openById(id);
  var body = doc.getBody().getText();
  return body;
}



index.html
<!DOCTYPE html>
<html>
<body>
  <textarea id="ta" style="width: 20vw;height:90vh;"></textarea>
<script>
getData();

/************************************
elem(id)
************************************/
function elem(id) {
  return document.getElementById(id);
}

/************************************
getData()
************************************/
function getData() {
  google.script.run
  .withFailureHandler(onFailure)
  .withSuccessHandler(gotDocText)
  .getDocText();
}

/************************************
gotDocText(result)
************************************/
function gotDocText(result) {
  elem('ta').value = result;
}

/************************************
onFailure(e)
************************************/
function onFailure(e) {
  alert([e.message, e.stack]);
}

</script>
</body>
</html>



2019年4月29日月曜日

Googleドライブのフォルダ内のドキュメントからテキストを取得したい


この記事のコード.gsでやること

Googleドライブで
複数のドキュメントファイルが入ったフォルダがあって
そのフォルダIDを指定して
ドキュメントのテキストを配列で取得する


やらないこと
ファイル名で並べ替えることはここではやらない


並べ替えるコードはこちら



コード.gs
function getDocTexts() {
  var folderId = 'ID';
  var folder = DriveApp.getFolderById(folderId);
  var ids = getFileIds(folderId);
  var textArray = [];
  for(var i = 0; i < ids.length; i++) {
    var text = getDocText(ids[i]);
    textArray.push(text);
  }
  Logger.log(textArray);
}

function getDocText(id) {
  var doc = DocumentApp.openById(id);
  var text = doc.getBody().getText();
  return text;
}

function getFileIds(folderId) {
  var ids = [];
  var folder = DriveApp.getFolderById(folderId);
  var contents = folder.getFiles();
  while(contents.hasNext()) {
    var file = contents.next();
    var id = file.getId();
    ids.push(id);
  }
  return ids;
}



関連記事
Googleドライブで指定したフォルダ内にあるファイルidを取得したい

2019年1月19日土曜日

Googleドキュメントにテキストを追加したい


ドキュメントに hello を入力しておいて



hi と hey を追加する




コード.gs
function addText() {
  var url = "https://docs.google.com/document/d/ID/edit";
  var doc = DocumentApp.openByUrl(url);
  var body = doc.getBody();
  body.appendParagraph("hi" + "\n" + "hey");
}


getBody()しなくても動いた。
DocumentApp.openByUrl(url).appendParagraph("hi" + "\n" + "hey")


参考

appendParagraph(text)
https://developers.google.com/apps-script/reference/document/body#appendParagraph(String)

Googleドキュメント全体のフォントサイズを変更したい


ドキュメント全体のフォントサイズを14に変更してみる

これで実現できました。

 DocumentApp.openByUrl(ドキュメントのURL)
  .editAsText()
  .setFontSize(14);



コード.gs
function changeFontSize() {
  var url = "https://docs.google.com/document/d/ID/edit";
  var doc = DocumentApp.openByUrl(url);
  doc.editAsText().setFontSize(14); 
}


参考

editAsText()
https://developers.google.com/apps-script/reference/document/text#editAsText()

テキストファイルをGoogleドキュメントで開きたい


ドキュメントの場合はMIME TYPEをこうすると良いらしい
mimeType: 'application/vnd.google-apps.document'


事前準備





コード.gs
function createDocFromText() {
  var url = "https://drive.google.com/file/d/ID/view?usp=sharing";//テキストファイルのURL
  var id = url.split("/d/")[1].split("/")[0];
  var file = DriveApp.getFileById(id);
  var name = file.getName();
  var blob = file.getBlob();

  var file = {
    title: name,
    mimeType: 'application/vnd.google-apps.document'
  };
  
  file = Drive.Files.insert(file, blob);
  var id = file.id;
  var docUrl = "https://docs.google.com/document/d/" + id + "/edit";
  Logger.log(docUrl);
}



参考

Supported MIME Types
https://developers.google.com/drive/api/v3/mime-types

Uploading files
https://developers.google.com/apps-script/advanced/drive#uploading_files



2019年1月17日木曜日

Googleドキュメントを作成してテキストを渡す


新規ドキュメントを作成してテキストを入れてみます





コード.gs
function createNewDoc() {
  var doc = DocumentApp.create('Document Name');
  var body = doc.getBody();
  body.setText("テキスト1\nテキスト2");
  var url = doc.getUrl();
  Logger.log(url);
}
意訳
この機能がやること
新規ドキュメントを作成する
bodyを取得する
テキストを入力する
urlを取得する
ログに出す



補足

渡すテキストが多いとこのようなエラーがでます



関連記事


参考

setText(text)
https://developers.google.com/apps-script/reference/document/body#setText(String)

Googleドキュメントをスクリプトで作成する


DocumentApp.create で新規ドキュメントを作ってみます



コード.gs
function createNewDoc() {
  var doc = DocumentApp.create('Document Name');
  var url = doc.getUrl();
  Logger.log(url);
}
意訳
この機能がやること
新規ドキュメントを作成する(名前を決める)
作成したドキュメントのurlを取得して
ログに出す



createNewDoc()を実行すると
マイドライブ内に新規ドキュメントが作成されます




関連記事

指定したフォルダに入れたい場合




参考

Class DocumentApp
https://developers.google.com/apps-script/reference/document/document-app

Latest post

Google Formsでクイズを作りたい

Googleフォームには回答を判定するクイズモードがあります 今回はそのクイズモードで回答の判定とフィードバックについて書いていきます 「クイズモード」の表記: 日本語の表記は「テストにする」ですが 英語の表記は「Make this a quiz」となっています この記事ではそれ...