Skip to content

Instantly share code, notes, and snippets.

@agungsugiarto
Created November 19, 2025 01:47
Show Gist options
  • Select an option

  • Save agungsugiarto/270a71fd1d4ba296baca744bd2872fb3 to your computer and use it in GitHub Desktop.

Select an option

Save agungsugiarto/270a71fd1d4ba296baca744bd2872fb3 to your computer and use it in GitHub Desktop.
impor-analisis-gscript
function getFormItems(form_id) {
try {
// Validate form_id
if (!form_id || typeof form_id !== 'string') {
throw new Error('Invalid form_id provided');
}
// Open a form by ID
var form = FormApp.openById(form_id);
if (!form) {
throw new Error('Form not found');
}
var objResult = {
pertanyaan: [],
jawaban: []
};
// Get form items
var items = form.getItems();
if (!items || items.length === 0) {
Logger.log('No items found in form');
return objResult;
}
// QUESTION ITEMS
var arrayPertanyaan = [];
for (var i = 0; i < items.length; i++) {
try {
var item = items[i];
var objItem = {
title: item.getTitle() || '',
type: item.getType(),
choices: []
};
// Handle multiple choice items
if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
var multipleChoiceItem = item.asMultipleChoiceItem();
var choices = multipleChoiceItem.getChoices();
objItem.choices = choices.map(function(choice) {
return choice.getValue();
});
}
arrayPertanyaan.push(objItem);
} catch (itemError) {
Logger.log('Error processing item ' + i + ': ' + itemError.message);
// Continue processing other items
}
}
// RESPONSE
var arrayJawaban = [];
var responses = form.getResponses();
if (!responses || responses.length === 0) {
Logger.log('No responses found in form');
objResult.pertanyaan = arrayPertanyaan;
return objResult;
}
// Iterate for every response
for (var i = 0; i < responses.length; i++) {
try {
var values = [];
var itemResponse = responses[i].getGradableItemResponses();
if (!itemResponse) {
Logger.log('No item responses for response ' + i);
continue;
}
// Iterate for every question response
for (var j = 0; j < itemResponse.length; j++) {
try {
var response = itemResponse[j].getResponse();
values.push(response);
// Record unique value for non-multiple choice
if (arrayPertanyaan[j] &&
arrayPertanyaan[j].type !== FormApp.ItemType.MULTIPLE_CHOICE) {
if (!arrayPertanyaan[j].choices.includes(response)) {
arrayPertanyaan[j].choices.push(response);
}
}
} catch (responseError) {
Logger.log('Error processing response ' + i + ', item ' + j + ': ' + responseError.message);
values.push(null); // Add null for failed response
}
}
arrayJawaban.push(values);
} catch (responseError) {
Logger.log('Error processing response ' + i + ': ' + responseError.message);
// Continue processing other responses
}
}
objResult.pertanyaan = arrayPertanyaan;
objResult.jawaban = arrayJawaban;
return objResult;
} catch (error) {
Logger.log('Error in getFormItems: ' + error.message);
return {
error: true,
message: error.message,
pertanyaan: [],
jawaban: []
};
}
}
function main() {
try {
var result = getFormItems('1A93T43fiBP4YIRnUAng1ddjQotTPavAbmkAVACcCuLI');
if (result.error) {
Logger.log('Error occurred: ' + result.message);
} else {
Logger.log('Success: ' + JSON.stringify(result));
}
} catch (error) {
Logger.log('Error in main: ' + error.message);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment