Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Tomokatsu-Sakamoto/4bac28f2d777ad08c9ab6b06a283b41b to your computer and use it in GitHub Desktop.
Save Tomokatsu-Sakamoto/4bac28f2d777ad08c9ab6b06a283b41b to your computer and use it in GitHub Desktop.
//----------------------------------------------------------------------------
// スプレッドシートにメニュー項目を追加する
function onOpen( ) {
Logger.log( "[開始] メニュー項目を追加" );
SpreadsheetApp.getUi( )
.createMenu( '組織部門の取得' )
.addItem( '組織部門の取得', 'orgunitsList' )
.addSeparator( )
.addItem( '作業域のクリア', 'clearCells' )
.addToUi( );
Logger.log( "[終了] メニュー項目を追加" );
}
//----------------------------------------------------------------------------
// 作業域(A:I)をクリアする
function clearCells( ) {
var sheet = SpreadsheetApp.getActiveSheet( );
// 組織部門の情報
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/orgunits#OrgUnit
var labelString = [
"orgUnitPath", // "orgUnitPath": string,
// The full path to the organizational unit. The orgUnitPath is a derived property.
// 組織部門へのフルパス。orgUnitPath派生プロパティです。
"name", // "name": string,
// The organizational unit's path name.
// 組織部門のパス名。
"description", // "description": string,
// Description of the organizational unit.
// 組織部門の説明。
"kind", // "kind": string,
// The type of the API resource. For Orgunits resources, the value is admin#directory#orgUnit.
// APIリソースのタイプ。Orgunitsリソースの場合、値はadmin#directory#orgUnitです。
"etag", // "etag": string,
// ETag of the resource.
// リソースのETag。
"parentOrgUnitPath", // "parentOrgUnitPath": string
// The organizational unit's parent path.
// 組織部門の親パス。
"parentOrgUnitId", // "parentOrgUnitId": string,
// The unique ID of the parent organizational unit.
// 親組織部門の一意のID。
"orgUnitId", // "orgUnitId": string,
// The unique ID of the organizational unit.
// 組織部門の一意のID。
"blockInheritance", // "blockInheritance": boolean,
// Determines if a sub-organizational unit can inherit the settings of the parent organization.
// The default value is false, meaning a sub-organizational unit inherits the settings of the nearest parent organizational unit.
// サブ組織部門が親組織部門の設定を継承できるかどうかを決定します。
// デフォルト値はですfalse。これは、下位組織部門が最も近い親組織部門の設定を継承することを意味します。
];
// 一旦すべて削除
sheet.getRange( "A1:I1000" ).clearContent( );
// 1行目にラベルとなる文字列を設定
for ( var i = 0 ; i < labelString.length ; i++ ) {
sheet.getRange( 1, i + 1 ).setNumberFormat( "@" ); // 「書式なしテキスト」
sheet.getRange( 1, i + 1 ).setBackgroundRGB( 201, 218, 248 );
sheet.getRange( 1, i + 1 ).setValue( labelString[ i ] );
}
// 行と列を固定とする
// https://developers.google.com/apps-script/reference/spreadsheet/sheet#setfrozenrowsrows
// https://developers.google.com/apps-script/reference/spreadsheet/sheet#setfrozencolumnscolumns
sheet.setFrozenRows( 1 ); // 1行 固定
sheet.setFrozenColumns( 2 ); // 2列 固定
// C2 にカーソルを設定
sheet.getRange( "C2" ).activate( );
SpreadsheetApp.flush(); // シートの再描画
}
//----------------------------------------------------------------------------
// 作業域に組織部門を読み込む
function orgunitsList( ) {
var sheet = SpreadsheetApp.getActiveSheet( );
// 作業域のクリア
clearCells( ); // 一旦すべて削除
// 組織部門の取得
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/orgunits/list
var orgunits = AdminDirectory.Orgunits.list( "my_customer", { orgUnitPath : "/", type : "ALL" } );
// 取得した組織部門をスプレッドシートに書き出し
for ( var i = 0 ; i < orgunits.organizationUnits.length ; i++ ) {
var row = 2 + i;
var orgunit = orgunits.organizationUnits[ i ];
// どの値も string なので、セルには表示形式として「書式なしテキスト」を設定
for ( var j = 1 ; j <= 9 ; j++ ) {
sheet.getRange( row, j ).setNumberFormat( "@" ); // 「書式なしテキスト」
sheet.getRange( row, j ).setWrapStrategy( SpreadsheetApp.WrapStrategy.CLIP ); //切り詰める
}
j = 1;
// 組織部門の情報をセルに書き出す
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/orgunits#OrgUnit
sheet.getRange( row, j++ ).setValue( orgunit.orgUnitPath ); // "orgUnitPath": string,
sheet.getRange( row, j++ ).setValue( orgunit.name ); // "name": string,
sheet.getRange( row, j++ ).setValue( orgunit.description ); // "description": string,
sheet.getRange( row, j++ ).setValue( orgunit.kind ); // "kind": string,
sheet.getRange( row, j++ ).setValue( orgunit.etag ); // "etag": string,
sheet.getRange( row, j++ ).setValue( orgunit.parentOrgUnitPath ); // "parentOrgUnitPath": string
sheet.getRange( row, j++ ).setValue( orgunit.parentOrgUnitId ); // "parentOrgUnitId": string,
sheet.getRange( row, j++ ).setValue( orgunit.orgUnitId ); // "orgUnitId": string,
sheet.getRange( row, j++ ).setValue( orgunit.blockInheritance ); // "blockInheritance": boolean,
/*
SpreadsheetApp.flush(); // シートの再描画
*/
}
// 書き出した情報を orgUnitPath をキーにしてソートする
sheet.getRange( "A2:I1000" ).sort( { column: 1, ascending: true } ); // 1 : orgUnitPath
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment