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

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

2024年6月12日水曜日

Google Apps Scriptの障害時はIssueTrackerを見てみる - Incidents for Apps Script are reported on Issue Tracker




Google Apps Scriptの障害時は IssueTracker に課題が上がっていることが多いです。
When Google Apps Script is experiencing issues, there's often an issue raised on the IssueTracker.




昨晩2024/06/11、スクリプトエディタが開けなくて見に行ったら課題が上がっていました。
Last night, on June 11th, 2024, I couldn't open the script editor, and when I checked, I found an issue had been raised.


Google Workspace Status Dashboard

Google Issue Tracker

Issue tracking system and product feature requests

2024年6月11日火曜日

スライドの表でセルのフォントを変えたい - change the cell font in a table in Slides using Apps Script


Google Slidesに配置した表内のフォントを変更したくて試したコードです。
I tried to change the font style of text in a table in Google Slides using the following Apps Script.


選択した表内のフォントをImpactへ変更します。
Change the font of the selected table to Impact.



Apps Script


Code.gs
function setTableCellFont() {
const presentation = SlidesApp.getActivePresentation();
const selection = presentation.getSelection();
const pageElement = selection.getPageElementRange().getPageElements()[0];
const table = pageElement.asTable();
const numRows = table.getNumRows();
const numColumns = table.getNumColumns();
for (let row = 0; row < numRows; row++) {
for (let col = 0; col < numColumns; col++) {
const cell = table.getCell(row, col);
const textRange = cell.getText();
const textStyle = textRange.getTextStyle();
textStyle.setFontFamily('Impact');
}
}
}


Reference

Class TextStyle > setFontFamily(fontFamily)

2024年6月10日月曜日

Google SlidesのダイアログにSpreadsheetの値を読み込みたい(datalist) - load the values from the Spreadsheet into a dialog in Google Slides.


Google Slidesのダイアログに配置したdatalistに、Spreadsheetの値を入れる機能を作ったときの備忘録です。
This is a memo for when I created a function to load values from a Spreadsheet into the options of a datalist placed in a dialog in Google Slides.




Procedures

SpreadsheetのA1〜A3にそれぞれ以下の値を入れておきます。
Enter the following values into cells A1 to A3 of the spreadsheet.
A1: option 1
A2: option 2
A3: option 3


Google SlidesのApps Scriptに以下のCode.gsを書きます。
Write the following code in Code.gs in Google Slides Apps Script.


SPREADSHEET_IDは読み込ませたい値が入ったシートのIDに置き換えます。
Replace SPREADSHEET_ID with the ID of the sheet containing the values you want to load.


modalessTemplate() を実行すると、ダイアログに配置したデータリストにシートの値が読み込まれます。
Execute the modalessTemplate() to load those data into a data list placed in a dialog in Google Slides.


リストにない option 4 を入力してsubmitをクリックします。
Enter option 4, which is not in the list, and click submit.



シートに option 4 が追加されます。
Option 4 will be added to the sheet.


ダイアログリストにも option 4 が追加されます。
The option 4 will also be added to the list in the dialog.



Apps Script


Code.gs
const ssUrl = "https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0";

function modalessTemplate() {
const htmlOutput = HtmlService
.createTemplateFromFile("index")
.evaluate()
.setWidth(360)
.setHeight(240);
SlidesApp.getUi().showModelessDialog(htmlOutput, "MyGUI");
}

function returnList() {
const sheet = SpreadsheetApp.openByUrl(ssUrl).getSheets()[0];
const values = sheet.getDataRange().getValues();
const list = values.flat();
return list;
}

function setNewValue(newValue) {
const sheet = SpreadsheetApp.openByUrl(ssUrl).getSheets()[0];
const lastRow = sheet.getLastRow();
const data = sheet.getRange("A1:A" + lastRow).getValues();
for (let i = 0; i < data.length; i++) {
if (data[i][0] == newValue) {
return "failure: value already exists";
}
}
sheet.getRange("A" + (lastRow + 1)).setValue(newValue);
return "success";
}


index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<input type="text" id="tb" list="sheetValues">
<button id="submit">submit</button>
<datalist id="sheetValues"></datalist>

<script>
function elem(id) {
return document.getElementById(id);
}

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

elem("submit").addEventListener("click", submitClicked);

getList();
function getList() {
google.script.run
.withFailureHandler(onFailure)
.withSuccessHandler(createDatalist)
.returnList();
}

function createDatalist(list) {
const datalist = elem("sheetValues");
console.log(list)
for(let i = 0; i < list.length; i++) {
const option = document.createElement("option");
option.textContent = list[i];
datalist.appendChild(option);
}
}

function submitClicked() {
const newValue = elem("tb").value;
google.script.run
.withFailureHandler(onFailure)
.withSuccessHandler(successSetNewValue)
.withUserObject(newValue)
.setNewValue(newValue);
}

function successSetNewValue(message, newValue) {
console.log(message);
if(message === "success") {
const datalist = elem("sheetValues");
const option = document.createElement("option");
option.textContent = newValue;
datalist.appendChild(option);
}
}
</script>
</body>
</html>


Reference

シートのデータをdatalistに読み込みたい

スプレッドシートのurlとnameをHTMLServiceでセレクトボックスのオプションに保存したい

2024年6月9日日曜日

Apps Scriptでスプレッドシートのセルを結合して上揃えにしたい - Merge cells and align top in Spreadsheet using Apps Script


スプレッドシートのセルを結合して垂直方向の配置を設定するコードを試しました。
I tried Apps Script to merge cells and set the vertical alignment in a spreadsheet.


今回の例では、
In this example,

3列目の4行目と5行目のセルを結合します。
I will merge the cells in the 3rd column, 4th and 5th rows.

垂直方向の配置は「上」に設定します。
The vertical alignment will be set to "top."

結合したセルにvalueという値を入力します。
The merged cell will be filled with the value "value."



Apps Script


Code.gs
function mergeCellsInColumnU() {
const value = "value";
const sheet = SpreadsheetApp.getActiveSheet();
const startRow = 4;
const startCol = 3;
const numRows = 2;
const numCols = 1;
const range = sheet.getRange(startRow, startCol, numRows, numCols);
range.merge().setVerticalAlignment("top").setValue(value);
}


Tips

選択範囲で行単位、列単位で結合するメソッドもあったので試してみました。
I also tried using the methods that allow merging cells by row or column within a selected range.


mergeAcross()
function mergeCellsInColumnU() {
const value = "value";
const sheet = SpreadsheetApp.getActiveSheet();
const startRow = 4;
const startCol = 3;
const numRows = 2;
const numCols = 3;
const range = sheet.getRange(startRow, startCol, numRows, numCols);
range.mergeAcross().setVerticalAlignment("top").setValue(value);
}



mergeVertically()
function mergeCellsInColumnU() {
const value = "value";
const sheet = SpreadsheetApp.getActiveSheet();
const startRow = 4;
const startCol = 3;
const numRows = 2;
const numCols = 3;
const range = sheet.getRange(startRow, startCol, numRows, numCols);
range.mergeVertically().setVerticalAlignment("top").setValue(value);
}


Reference

Class Range > merge()

Class Range > mergeAcross()

Class Range > mergeVertically()

Latest post

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

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