2022年10月22日土曜日

GAS使ってグループの名前リストを作成

 権限の関係でグループのEmaiアドレスは取得できても、名前が取得できないことがあるようだ。画面上では表示されているが、ダウンロードはEmaiのみ。ただし、Chromeで、「名前を付けて保存」>ファイルの種類を「ウエブページ、完全」 を選択して保存すると、UTF8で全角文字できちんと保存されるので、面倒だが、このデータをGdriveに持って行って、GASでパースすることにした。

GASは、データを保存したいスプレッドシートに、スクリプトを作成する。この場合、Parseというライブラリの追加が必要。2022.7現在、ライブラリのIDは

1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

もっと簡単な方法がありそうだが、とりあえず、以下のスクリプトで、無事 Emailと名前のリストが取得できた。


function member_parse() {

var contents = DriveApp.getFolderById('ここにフォルダのID')
.getFilesByName('メンバーリスト.html')
.next()
.getBlob()
.getDataAsString("utf8");
//Logger.log(contents); let mList= new Array();
let eList= new Array(); names = Parser.data(contents).from('<div class="LnLepd">').to('</div>').iterate();
emails=Parser.data(contents).from('Sq3iG" href="mailto:').to('</a>').iterate(); for(nm of names){
mList.push(nm);
} var ci=0;
for(em of emails){
if (ci % 2 ==0){ eList.push(em.split('>')[1]);}
ci++;
}
//console.log(zip(eList,mList));
NameEmailList=zip(eList,mList); var sheet = SpreadsheetApp.openById('ここにスプレッドシートのID').getSheetByName('shokuin'); for (gyo of NameEmailList){
sheet.appendRow(gyo);
} } const zip = (...arrays) => {
const length = Math.min(...(arrays.map(arr => arr.length)))
return new Array(length).fill().map((_, i) => arrays.map(arr => arr[i]))

}


GASとスプレッドシートを組み合わせて、コードを書いていると、ちょうどエクセルのマクロを使っているような感覚になる。ちょっとした操作で、シートの動作が変わって、コードがうまく動かなくなることも。無料なので、手間はかかるのは仕方ない。半面、シートで実際のデータがどうなっているか、すぐ確認できるよさはある。

0 件のコメント:

コメントを投稿