SQLの窓

2021年03月18日


GAS : 自分の共有ドライブ一覧とマイドライブのルートフォルダ一覧

スプレッドシートに出力します

Logger.log がとても使いやすくなりましたが、あきまでデバッグ目的になるのでスプレッドシートに結果を残します。実行前に出力する列単位のクリアを行っていますが、マクロで取得したコードです。

Drive API サービスの設定

GAS からは、V2 の利用となるので注意が必要です。V3 ではパラメータが違います

マイドライブのルートフォルダのソート

そのままではソートされないので、一旦配列へセットしてソートしてから出力しています
function listDrive() {

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

  // 列クリア
  spreadsheet.getRange('A:E').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, commentsOnly: true, skipFilteredRows: true});

  // **************************************************
  // ドライブ 一覧 ( 100件まで:それ以上は nextPageToken を使う )
  // Drive API v2
  // **************************************************
  var response = Drive.Drives.list({"maxResults":100});
  var drives = response.items;
  var targetRange;
  for (i = 0; i < drives.length; i++) {

    Logger.log('%s (%s)', drives[i].name, drives[i].id);
    targetRange = spreadsheet.getRange('A' + (i+1));
    targetRange.setValue(drives[i].name);
    targetRange = spreadsheet.getRange('B' + (i+1));
    targetRange.setValue(drives[i].id);

  }  

  // **************************************************
  // マイドライブルート 内のフォルダの一覧 ( Drive API は必要ない )
  // **************************************************
  var folders = DriveApp.getRootFolder().getFolders();
  var a = new Array();

  while (folders.hasNext()) {
    var folder = folders.next();
    Logger.log(folder.getName());
    a.push(folder.getName());
  }

  a.sort()
  for (i = 0; i < a.length; i++) {
    targetRange = spreadsheet.getRange('E' + (i+1));
    targetRange.setValue(a[i]);
  }

}





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

2021年03月15日


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



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

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



以下のサンプルでは、Classroom の一覧取得後に目的の id を確認して固定で投稿しています。
function myFunction() {

	// **************************************************
	// Classroom 一覧	
	// **************************************************
	var response = Classroom.Courses.list();
	var courses = response.courses;
	for (i = 0; i < courses.length; i++) {
		Logger.log('%s (%s)', courses[i].name, courses[i].id);
	}

	// **************************************************
	// POST する JSON	
	// **************************************************
	var target = "35126354603";

	var data = {
		"courseId" : target, 
		"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, target);  

}

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 のテーマ画像のサイズと既存画像をテーマ画像として使用してみた手順



courses.announcements.create リファレンス



posted by lightbox at 2021-03-15 14:04 | GAS | このブログの読者になる | 更新情報をチェックする

2020年10月13日


GAS : Google スプレッドシートのセルを使用してメール送信

セルの B1、B2、B3 に入力してメールを送信します。



GAS : sendEmail
GAS : msgBox
GAS : SpreadsheetApp クラス



シート名は メール送信となっており、getSheetByName で対象のシートオブジェクトを得ます。

実行ボタンは図形描画で追加して、右上のメニューから コード.gs 内に定義した function 名を割り当てます。一度割り当てたら、図形は右クリックでメニュー選択が可能になります。

セル内の改行は ALT+Enter です。 

// ************************************
// メール送信
// ************************************
function SendMail_1() {

  var result = Browser.msgBox('確認', 'メールを送信しますか?', Browser.Buttons.YES_NO);
  
  if ( result != "yes" ) {
    return;
  }
  
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName("メール送信");  
  
  // 宛先
  var targetRange = sheet.getRange('B1');
  var targetTo = targetRange.getDisplayValue();
  var targetList = targetTo.split(",");

  // 件名
  targetRange = sheet.getRange('B2');
  targetSubject = targetRange.getDisplayValue();

  // 本文
  targetRange = sheet.getRange('B3');
  targetBody = targetRange.getDisplayValue();
  
  for(var i = 0; i< targetList.length; i++ ) {
  
    GmailApp.sendEmail( targetList[i].trim(), targetSubject, targetBody );
  
  }

  Browser.msgBox("処理が終了しました");

}




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

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 | このブログの読者になる | 更新情報をチェックする
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 終わり