【GAS】Google Apps Script 活用事例 集計結果をざっとドキュメントにまとめるスクリプト
画像はAdobe Expressのテキストから画像を作成するAIを作成しました。(※修正はなし。出力結果のまま使用)
Google Formsのアンケート集計結果を(集計用シートなどなしで)簡単にざっとまとめるスクリプトを書きました。
コード全文
function countNumbers() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('参加後アンケート');
const values = sheet.getDataRange().getDisplayValues();
const header = values.shift();
const column = {
wholeEventSatisfaction: header.indexOf('イベント全体の満足度'),
panelDiscussion: header.indexOf('パネルディスカッションの満足度'),
afterTalkSatisfaction: header.indexOf('質疑応答の満足度'),
};
console.log(header);
console.log(values);
console.log(column);
const keys = Object.keys(column);
const items = getItems_(values);
let string = '';
// シートのアンケート結果を集計する
keys.map(key => {
const generateArray = (values, columnIndex) => values.map(row => row[columnIndex]);
const converted = generateArray(values, column[key]);
const headerName = header[column[key]];
const itemCounts = countItemsInArray_(converted, items, headerName);
console.log(converted);
console.log(`headerName: ${headerName}`);
console.log(itemCounts);
string += `${itemCounts}\n\n`;
});
console.log(string);
// ドキュメントに集計結果を転記する
const url = 'https://docs.google.com/document/d/*******************/edit';
updateDocument_(url, string);
}
/**
* 2次元配列から重複排除した1次元配列を作成する
*
* @param {Array.<Array.<string>>} values - 2次元配列
* @return {Array.<string>}
*
*/
function getItems_(values){
const items = Array.from(new Set(values.flat()));
console.log(items);
return items
}
/**
* 出力結果を転記し、ドキュメントを更新する
* @param {string} url - URL
*
*/
function updateDocument_(url, string){
const documentId = url.replace(/.*document\/d\//, '').replace('/edit', '');
const document = DocumentApp.openById(documentId);
console.log(documentId);
document.getBody().setText(string);
}
/**
* itemsが1次元配列内の要素数の出現回数を文字列で返す
*
* @param {Array.<string>} array - 1次元配列
* @param {Array.<string>} items - 1次元配列
* @param {string} headerName - 項目名
* @return {string}
*
*
*/
function countItemsInArray_(array, items, headerName) {
const counts = {};
array.forEach(item => {
if (items.includes(item)) {
counts[item] = (counts[item] || 0) + 1;
}
});
console.log(`headerName: ${headerName}`);
console.log(counts);
const itemCountsString = Object.keys(counts).map(key => `・ ${key}: ${counts[key]}`).join('\n');
const output = `${headerName}\n${itemCountsString}`;
console.log(typeof itemCountsString);
console.warn(output);
return output
}
ログの出力結果
console.warnの本来の使い方ではありませんが、見やすいように色を変えています。
この記事が気に入ったらサポートをしてみませんか?