SQLの窓

2020年08月02日


GAS : スプレッドシートのメニューに関数実行用のメニューを追加する



SpreadsheetApp.getUI
スクリプトがメニュー、ダイアログ、サイドバーなどの機能を追加できるようにする、スプレッドシートのユーザーインターフェイス環境のインスタンスを返します。 スクリプトは、開いているスプレッドシートの現在のインスタンスのUIとのみ対話でき、スクリプトがスプレッドシートにバインドされている場合に限ります。
createCal は関数名です。
// ************************************
// メニューの追加
// ************************************
function onOpen(e) {
	var ui = SpreadsheetApp.getUi();
	ui.createMenu('カレンダー作成')
		 .addItem('カレンダーへ適用', 'createCal')
		 .addToUi();
	
}

// ************************************
// 
// ************************************
function createCal() {


}





posted by lightbox at 2020-08-02 20:46 | GAS | このブログの読者になる | 更新情報をチェックする

2020年07月31日


GAS : Classroom API で、コースに生徒を一括登録する

スクリプトエディタのリソースメニュー(Google の拡張サービス)より API を実行可能にしておく必要があります。



コースID を指定して、A 列に並べたユーザ文字列を元に、生徒として一括登録します

function createStudent() {

	var CourceId = "コースID";

	// 選択したシートを対象とします
	var spreadsheet = SpreadsheetApp.getActive();

	// 行番号
	var i = 1;

	while (true) {

		// 登録済のフォルダを排除する為に順に比較していく
		var targetRange = spreadsheet.getRange('A' + i);
		var cellWork = targetRange.getValue().toString();
		if (cellWork != '') {

			// 生徒作成用の JSON
			var json = {
				"userId": cellWork + "@ドメイン"
			};

			// 生徒を追加
			// ( 招待済でも確定します )
			try {
				Classroom.Courses.Students.create(json, CourceId);

			}
			catch(e) {
				GmailApp.sendEmail("メールアドレス", "Classroom 生徒登録エラー", JSON.stringify(json) + "\r\n" + e.message );

			}

			i++;

		}
		else {
			break;
		}
	}
}



関連する記事

GAS : Classroom API で、コース一覧と、コース毎のトピック一覧をスプレッドシートに出力




posted by lightbox at 2020-07-31 14:46 | GAS | このブログの読者になる | 更新情報をチェックする

GAS : Classroom API で、コース一覧と、コース毎のトピック一覧をスプレッドシートに出力

スクリプトエディタのリソースメニュー(Google の拡張サービス)より API を実行可能にしておく必要があります。



A に コースの ID、B にコース名、D にトピック ID、E にトピック名をセットします。

function listCourseAndTopic() {

	// 選択したシートを対象とします
	var spreadsheet = SpreadsheetApp.getActive();

	// コースの一覧( 1つ以上あるという前提 )
	var json = Classroom.Courses.list();

	var cnt = json.courses.length;
	
	var rowno = 0;

	for( var i = 0; i < cnt; i++ ) {
		var targetRange = spreadsheet.getRange('A' + (rowno + i + 1));
		targetRange.setValue(json.courses[i].id);
		targetRange = spreadsheet.getRange('B' + (rowno + i + 1));
		targetRange.setValue(json.courses[i].name);

		// トピックが無い場合、jsonTopic は {} となります
		jsonTopic = Classroom.Courses.Topics.list( json.courses[i].id );
		try {
			for ( var j = 0; j < jsonTopic.topic.length; j++ ) {
				var targetRange = spreadsheet.getRange('D' + (rowno + i + 1));
				targetRange.setValue(jsonTopic.topic[j].topicId);
				targetRange = spreadsheet.getRange('E' + (rowno + i + 1));
				targetRange.setValue(jsonTopic.topic[j].name);
				rowno++;
			}

			// トピックがあった場合一行空ける為にコメント
			// rowno--;
		}
		catch(e){
				// トピック無しでエラーの為ここで一行空けます
				rowno++;
		}

	}

}





posted by lightbox at 2020-07-31 14:20 | GAS | このブログの読者になる | 更新情報をチェックする

2020年03月07日


Google Apps Script : 時間主導のトリガを使用して、CRON のように一定間隔でスクリプトを実行する

関連する記事

Google Apps Script(GAS) で、Google Classroom に投稿する


一定間隔で、Classroom になんらかの授業用データを作成する為の準備用作業です。

▼ まず Google スプレッドシートを作成してスクリプトエディタを起動します


▼ コースid ( 整数文字列 ) と コース名をメールに送信するコードを保存


▼ スクリプト名を決定して保存


▼ Google の拡張サービスで、Classroom の API を使用可能にする




▼ トリガ登録画面を表示する


▼ トリガ登録


▼ トリガの時間間隔を決定


このスクリプトは、指定のメールアドレスに現在存在する コースid( 自分はクラス番号と呼んでます ) と名前を送っています。
function myFunction() {

	var response = Classroom.Courses.list({});
	var courses = response.courses;
	var course = "";
	for (i = 0; i < courses.length; i++) {
		course = courses[i];
		var now = new Date();
		GmailApp.sendEmail("メールアドレス",
						"Classroom の id と名前",
						course.id + " : " + course.name + " : " +now.toString()
		);
	}

}




リファレンス



posted by lightbox at 2020-03-07 20:38 | GAS | このブログの読者になる | 更新情報をチェックする

Google Apps Script(GAS) で、Google Classroom に投稿する



ドキュメントでは、REST API なので、UrlFetchApp クラスを使うのか? とか思ってしまいますが、そもそも それだと auth が必要なのでまだ試してしません。

で、そんな事をしなくてもそれぞれの REST の クラスのメソッドに引数を渡す形で実行できます。
但し、Classroom Service が拡張なので、スクリプトエディタのリソースメニュー(Google の拡張サービス)より API を実行可能にしておく必要があります。



以下のサンプルでは、Classroom は一つしか作成しておらず、ループである必要はありませんが、複数の場合に名前で特定する時に使えると思います。
function createAnnouncements(){
	
	// **************************************************
	// 現在は1つしか無いので、対象が course.id となります
	// **************************************************
	var response = Classroom.Courses.list({});
	var courses = response.courses;
	var course = "";
	for (i = 0; i < courses.length; i++) {
		course = courses[i];
		Logger.log('%s (%s)', course.name, course.id);
	}

	// **************************************************
	// POST する JSON	
	// **************************************************
	var data = {
		"courseId" : course.id, 
		"materials": [
			{
				"link": {
					"url": "https://news.google.com/?hl=ja&tab=rn1&gl=JP&ceid=JP:ja",
					"title": "Google ニュース",
					"thumbnailUrl": ""
				}
			}
		],
		"text": "Google Apps Script による Classroom への投稿",
		"assigneeMode": "ALL_STUDENTS",
		"state": "PUBLISHED"
	};

	Classroom.Courses.Announcements.create(data, course.id);

}


Logger.log は、何かと結果が表示されない事が多いので、Gmail で自分のアドレスに送信したほうがいいと思います。
// The code below will send an email with the current date and time.
var now = new Date();
GmailApp.sendEmail("mike@example.com", "current time", "The time is: " + now.toString());

関連する記事

Google Classroom のテーマ画像のサイズと既存画像をテーマ画像として使用してみた手順


このページの PDF




リファレンス



posted by lightbox at 2020-03-07 14:04 | GAS | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり