Last active
August 25, 2023 01:20
-
-
Save kaz-utashiro/cc65f6a9075127912a08ee37247d157b to your computer and use it in GitHub Desktop.
Google Spread Sheet から Document を自動生成するスクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onOpen() { | |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var menuEntries = [ {name: "印刷用ドキュメント作成", functionName: "createDoc"} ]; | |
spreadsheet.addMenu("カスタムメニュー", menuEntries); | |
} | |
const removeFirstEmptyParagraph = (body) => { | |
const firstParagraph = body.getParagraphs()[0]; | |
if (firstParagraph.getText() === '') { | |
firstParagraph.removeFromParent(); | |
} | |
} | |
const clearDocContent = (doc) => { | |
['getBody', 'getFooter', 'getHeader'].forEach((method) => { | |
let section = doc[method](); | |
section && section.clear(); | |
}); | |
} | |
const getOrCreateDocument = (title) => { | |
const files = DriveApp.getFilesByName(title); | |
if (files.hasNext()) { | |
const file = files.next(); | |
const doc = DocumentApp.openById(file.getId()); | |
clearDocContent(doc); | |
return doc; | |
} else { | |
return DocumentApp.create(title); | |
} | |
} | |
const createDoc = () => { | |
// スプレッドシートとシートを取得 | |
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
// スプレッドシートの名前にシート名を追加する | |
const sheet = spreadsheet.getActiveSheet(); | |
const title = `${spreadsheet.getName()}-${sheet.getName()}`; | |
// データを取得 | |
const data = sheet.getDataRange().getValues(); | |
// Googleドキュメントがあれば開く、なければ作る | |
const doc = getOrCreateDocument(title); | |
if (!doc) { | |
throw new Error("Failed to open or create."); | |
} | |
const body = doc.getBody(); | |
// フッターを取得または作成 | |
const footer = doc.getFooter() ? doc.getFooter() : doc.addFooter(); | |
// フッターにテキストを追加し、センタリング | |
footer.appendParagraph("Attack! 299") | |
.setAlignment(DocumentApp.HorizontalAlignment.CENTER) | |
.setFontSize(20); | |
// 2行目以降のデータについて処理 | |
data.slice(1).forEach((row, index) => { | |
// 2番目以降では改ページを挿入 | |
if (index > 0) { | |
// 2ページ目以降は改ページを挿入すべきだが、レイアウトがうまくいかないので挿入しない方がいい | |
// body.appendPageBreak(); | |
} | |
const [number, team, name] = row; | |
Logger.log(`ゼッケン:${number}, チーム:${team}, 氏名:${name}`); | |
body.appendParagraph(number.toString()).setFontSize(160); | |
body.appendParagraph(team).setFontSize(40); | |
body.appendParagraph(name).setFontSize(80); | |
if (index === 0) { | |
removeFirstEmptyParagraph(body); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
イベントの参加者リストから荷物の預かり札を印刷するためのスクリプト。
本当は PDF を生成したかったが、うまくいかなかったので、Google Document を作るところでやめた。
横に印刷する想定だが、印刷方向を指定することができないので、Document を開いてからページの向きを横に変更しなければならない。
テンプレートを用意して、それを修正するようにすればうまくいくはず。
そうすれば、例えば背景に画像を挿入するなどもできる。
メモ