Last active
February 1, 2026 11:48
-
-
Save libnumafly/7f94991bceab31d68abf89907d7effab to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| // SPDX-License-Identifier: WTFPL | |
| function updateCensusStatusFromEmail() { | |
| var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); | |
| // Gmailを検索 | |
| var threads = GmailApp.search('from:(no-reply@e-kokuseikanri.go.jp) is:unread', 0, 10); // とりあえず最大10スレッド取得 | |
| for (var i = 0; i < threads.length; i++) { | |
| var messages = threads[i].getMessages(); | |
| for (var j = 0; j < messages.length; j++) { | |
| var message = messages[j]; | |
| var body = message.getPlainBody(); // プレーンテキストで本文取得 | |
| // 本文から調査区番号を抽出 | |
| var censusAreaMatch = body.match(/調査区番号:(\S+)/); | |
| if (!censusAreaMatch) continue; | |
| var district = censusAreaMatch[1]; | |
| // 対応するシートを取得(シート名 = 調査区番号) | |
| var sheet = spreadsheet.getSheetByName(district); | |
| if (!sheet) { | |
| Logger.log('シートが見つかりません: ' + district); | |
| continue; | |
| } | |
| // 本文からネット世帯番号を抽出 | |
| var netAnsweredMatch = body.match(/<ネット世帯番号>\s*([\d,]+|なし)/); | |
| var netAnswered = (netAnsweredMatch && netAnsweredMatch[1] !== 'なし') ? netAnsweredMatch[1].split(',').map(Number) : []; | |
| // 本文から郵送世帯番号を抽出 | |
| var mailAnsweredMatch = body.match(/<郵送世帯番号>\s*([\d,]+|なし)/); | |
| var mailAnswered = (mailAnsweredMatch && mailAnsweredMatch[1] !== 'なし') ? mailAnsweredMatch[1].split(',').map(Number) : []; | |
| // シートのデータを取得(A列:世帯番号, D列:回答状態) | |
| var data = sheet.getDataRange().getValues(); | |
| for (var k = 1; k < data.length; k++) { // k = 1 : ヘッダー行をスキップ | |
| var householdNum = data[k][0]; // A列: 世帯番号 | |
| // ネットの場合 | |
| if (netAnswered.includes(householdNum)) { | |
| sheet.getRange(k + 1, 4).setValue('ネット'); // D列に"ネット"入力 | |
| } | |
| // 郵送の場合 | |
| else if (mailAnswered.includes(householdNum)) { | |
| sheet.getRange(k + 1, 4).setValue('郵送'); // D列に"郵送"入力 | |
| } | |
| } | |
| // 処理済みメールを既読またはラベル付け(任意) | |
| message.markRead(); | |
| } | |
| } | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
2025年(令和7年)に日本国内で行われた国勢調査で、調査期間中に調査員向けに毎朝配信される「回答済世帯通知」メールから世帯番号を抽出しシートに反映するために作成したスクリプトです。(調査期間中、国勢調査員として活動していました)
「回答済世帯通知」メールがGmailに配信され、Google SpreadsheetのApps Script機能を使ってこのスクリプトを動作させることが前提条件となっています。