GoogleSpreadSheet에서 GoogleForm을 만드는 GAS
17313 단어 googleformGoogleSpreadSheetgas
개요
선택사항이나 섹션이 많은 설문지를 Form에서 편집하면서 만드는 것은 번거롭고, 실수가 발생하기 쉽다고 생각했으므로, SpreadSheet의 정보를 바탕으로 생성할 수 있는 툴을 개발했습니다.
실현할 수 있는 일
1프로그래밍을 할 수 없는 유저가 사용하는 것을 상정해, 필요한 변수는 SpreadSheet로부터 읽어들이도록(듯이) 하고 있습니다
2 설명식 (메일 주소 형식도 설정 가능), 라디오 버튼, 체크 박스, 풀다운을 설정할 수 있습니다
3 필수로 할지를 선택할 수 있습니다
4 라디오 버튼, 체크 박스의 경우, 텍스트 박스로 입력할 수 있도록 할 수 있습니다
5 질문에 섹션을 설정할 수 있습니다.
6 원칙, Form은 SpreadSheet가있는 드라이브에 저장되지만 대상을 설정할 수 있습니다.
실현되지 않은 것
1 회답에 따라 섹션을 분기시킬 수 없었습니다. 루프 처리를 돌릴 때의 처리가 너무 복잡해져 구현이 어려웠습니다. 필요한 경우에는 완성된 양식을 손으로 수정해야 합니다.
2 Form 헤더에의 이미지 삽입, 그리드 형식의 질문 등은 직장에서의 수요가 없었기 때문에 구현하고 있지 않습니다. 요청이 있으면 별도로 개발해 보겠습니다.
SpreadSheet 화면 이미지
1 질문을 입력하는 표
2 선택을 입력하는 표
3 양식의 저장 위치를 입력하는 표
이쪽은 공백이라도 상관 없습니다.
소스 코드
const createEventForm = (e) => {
// 質問シート情報の取得
const ss = SpreadsheetApp.getActiveSpreadsheet()
const q_data = ss.getSheetByName('質問').getDataRange().getValues();
const q_lastrow = ss.getSheetByName('質問').getLastRow();
// 質問が1問も設定されていない場合、処理を終了する
if (q_lastrow < 3) {
Browser.msgBox("スプレッドシートには最低1問以上、質問を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
// タイトルと説明の設定
const title = q_data[0][1]; //タイトル
if (title == "") {
Browser.msgBox("フォームの名称を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
const form = setHeader(title);
// 選択肢シート情報の取得
const s_data = ss.getSheetByName('選択肢').getDataRange().getValues();
s_data.shift()
// 質問の設定
let j = 0; // 選択肢の列番号
let selections = null;
let section_prev = null;
for (let i = 2; i < q_lastrow; i++) {
// セクションの切り替えを行う
if(q_data[i][0] != section_prev && section_prev !== null) {
form.addPageBreakItem().setTitle(q_data[i][0]);
}
section_prev = q_data[i][0];
if (q_data[i][1] == 'ラジオボタン' ||
q_data[i][1] == 'チェックボックス' ||
q_data[i][1] == 'プルダウン') {
selections = getSelections(s_data, j);
if (!selections.length) {
Browser.msgBox("質問に対応する選択肢を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
}
// B列に指定した入力した内容に応じてフォームに入力項目を追加する
if (q_data[i][1] == '記述式') {
setTextQuestion(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]));
} else if (q_data[i][1] == 'メールアドレス') {
setMail(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]))
} else if (q_data[i][1] == 'ラジオボタン') {
setRadiobutton(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'チェックボックス') {
setCheckbox(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'プルダウン') {
setDropdownlist(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), selections);
j++;
}
}
// フォームの移動
let dest = ss.getSheetByName('移動先').getRange(1, 2).getValue();
if (dest) {
dest = dest.replace('https://drive.google.com/drive/folders/', '')
moveForm(form, dest);
}
Browser.msgBox("フォームの作成が完了しました。", Browser.Buttons.OK_CANCEL);
return;
}
Reference
이 문제에 관하여(GoogleSpreadSheet에서 GoogleForm을 만드는 GAS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirovirgo24/items/80b1795045550c43bd9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1프로그래밍을 할 수 없는 유저가 사용하는 것을 상정해, 필요한 변수는 SpreadSheet로부터 읽어들이도록(듯이) 하고 있습니다
2 설명식 (메일 주소 형식도 설정 가능), 라디오 버튼, 체크 박스, 풀다운을 설정할 수 있습니다
3 필수로 할지를 선택할 수 있습니다
4 라디오 버튼, 체크 박스의 경우, 텍스트 박스로 입력할 수 있도록 할 수 있습니다
5 질문에 섹션을 설정할 수 있습니다.
6 원칙, Form은 SpreadSheet가있는 드라이브에 저장되지만 대상을 설정할 수 있습니다.
실현되지 않은 것
1 회답에 따라 섹션을 분기시킬 수 없었습니다. 루프 처리를 돌릴 때의 처리가 너무 복잡해져 구현이 어려웠습니다. 필요한 경우에는 완성된 양식을 손으로 수정해야 합니다.
2 Form 헤더에의 이미지 삽입, 그리드 형식의 질문 등은 직장에서의 수요가 없었기 때문에 구현하고 있지 않습니다. 요청이 있으면 별도로 개발해 보겠습니다.
SpreadSheet 화면 이미지
1 질문을 입력하는 표
2 선택을 입력하는 표
3 양식의 저장 위치를 입력하는 표
이쪽은 공백이라도 상관 없습니다.
소스 코드
const createEventForm = (e) => {
// 質問シート情報の取得
const ss = SpreadsheetApp.getActiveSpreadsheet()
const q_data = ss.getSheetByName('質問').getDataRange().getValues();
const q_lastrow = ss.getSheetByName('質問').getLastRow();
// 質問が1問も設定されていない場合、処理を終了する
if (q_lastrow < 3) {
Browser.msgBox("スプレッドシートには最低1問以上、質問を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
// タイトルと説明の設定
const title = q_data[0][1]; //タイトル
if (title == "") {
Browser.msgBox("フォームの名称を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
const form = setHeader(title);
// 選択肢シート情報の取得
const s_data = ss.getSheetByName('選択肢').getDataRange().getValues();
s_data.shift()
// 質問の設定
let j = 0; // 選択肢の列番号
let selections = null;
let section_prev = null;
for (let i = 2; i < q_lastrow; i++) {
// セクションの切り替えを行う
if(q_data[i][0] != section_prev && section_prev !== null) {
form.addPageBreakItem().setTitle(q_data[i][0]);
}
section_prev = q_data[i][0];
if (q_data[i][1] == 'ラジオボタン' ||
q_data[i][1] == 'チェックボックス' ||
q_data[i][1] == 'プルダウン') {
selections = getSelections(s_data, j);
if (!selections.length) {
Browser.msgBox("質問に対応する選択肢を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
}
// B列に指定した入力した内容に応じてフォームに入力項目を追加する
if (q_data[i][1] == '記述式') {
setTextQuestion(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]));
} else if (q_data[i][1] == 'メールアドレス') {
setMail(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]))
} else if (q_data[i][1] == 'ラジオボタン') {
setRadiobutton(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'チェックボックス') {
setCheckbox(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'プルダウン') {
setDropdownlist(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), selections);
j++;
}
}
// フォームの移動
let dest = ss.getSheetByName('移動先').getRange(1, 2).getValue();
if (dest) {
dest = dest.replace('https://drive.google.com/drive/folders/', '')
moveForm(form, dest);
}
Browser.msgBox("フォームの作成が完了しました。", Browser.Buttons.OK_CANCEL);
return;
}
Reference
이 문제에 관하여(GoogleSpreadSheet에서 GoogleForm을 만드는 GAS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirovirgo24/items/80b1795045550c43bd9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1 질문을 입력하는 표
2 선택을 입력하는 표
3 양식의 저장 위치를 입력하는 표
이쪽은 공백이라도 상관 없습니다.
소스 코드
const createEventForm = (e) => {
// 質問シート情報の取得
const ss = SpreadsheetApp.getActiveSpreadsheet()
const q_data = ss.getSheetByName('質問').getDataRange().getValues();
const q_lastrow = ss.getSheetByName('質問').getLastRow();
// 質問が1問も設定されていない場合、処理を終了する
if (q_lastrow < 3) {
Browser.msgBox("スプレッドシートには最低1問以上、質問を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
// タイトルと説明の設定
const title = q_data[0][1]; //タイトル
if (title == "") {
Browser.msgBox("フォームの名称を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
const form = setHeader(title);
// 選択肢シート情報の取得
const s_data = ss.getSheetByName('選択肢').getDataRange().getValues();
s_data.shift()
// 質問の設定
let j = 0; // 選択肢の列番号
let selections = null;
let section_prev = null;
for (let i = 2; i < q_lastrow; i++) {
// セクションの切り替えを行う
if(q_data[i][0] != section_prev && section_prev !== null) {
form.addPageBreakItem().setTitle(q_data[i][0]);
}
section_prev = q_data[i][0];
if (q_data[i][1] == 'ラジオボタン' ||
q_data[i][1] == 'チェックボックス' ||
q_data[i][1] == 'プルダウン') {
selections = getSelections(s_data, j);
if (!selections.length) {
Browser.msgBox("質問に対応する選択肢を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
}
// B列に指定した入力した内容に応じてフォームに入力項目を追加する
if (q_data[i][1] == '記述式') {
setTextQuestion(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]));
} else if (q_data[i][1] == 'メールアドレス') {
setMail(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]))
} else if (q_data[i][1] == 'ラジオボタン') {
setRadiobutton(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'チェックボックス') {
setCheckbox(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'プルダウン') {
setDropdownlist(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), selections);
j++;
}
}
// フォームの移動
let dest = ss.getSheetByName('移動先').getRange(1, 2).getValue();
if (dest) {
dest = dest.replace('https://drive.google.com/drive/folders/', '')
moveForm(form, dest);
}
Browser.msgBox("フォームの作成が完了しました。", Browser.Buttons.OK_CANCEL);
return;
}
Reference
이 문제에 관하여(GoogleSpreadSheet에서 GoogleForm을 만드는 GAS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirovirgo24/items/80b1795045550c43bd9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const createEventForm = (e) => {
// 質問シート情報の取得
const ss = SpreadsheetApp.getActiveSpreadsheet()
const q_data = ss.getSheetByName('質問').getDataRange().getValues();
const q_lastrow = ss.getSheetByName('質問').getLastRow();
// 質問が1問も設定されていない場合、処理を終了する
if (q_lastrow < 3) {
Browser.msgBox("スプレッドシートには最低1問以上、質問を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
// タイトルと説明の設定
const title = q_data[0][1]; //タイトル
if (title == "") {
Browser.msgBox("フォームの名称を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
const form = setHeader(title);
// 選択肢シート情報の取得
const s_data = ss.getSheetByName('選択肢').getDataRange().getValues();
s_data.shift()
// 質問の設定
let j = 0; // 選択肢の列番号
let selections = null;
let section_prev = null;
for (let i = 2; i < q_lastrow; i++) {
// セクションの切り替えを行う
if(q_data[i][0] != section_prev && section_prev !== null) {
form.addPageBreakItem().setTitle(q_data[i][0]);
}
section_prev = q_data[i][0];
if (q_data[i][1] == 'ラジオボタン' ||
q_data[i][1] == 'チェックボックス' ||
q_data[i][1] == 'プルダウン') {
selections = getSelections(s_data, j);
if (!selections.length) {
Browser.msgBox("質問に対応する選択肢を入力してください。",
Browser.Buttons.OK_CANCEL);
return;
}
}
// B列に指定した入力した内容に応じてフォームに入力項目を追加する
if (q_data[i][1] == '記述式') {
setTextQuestion(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]));
} else if (q_data[i][1] == 'メールアドレス') {
setMail(form, q_data[i][2], q_data[i][3], Boolean(q_data[i][4]))
} else if (q_data[i][1] == 'ラジオボタン') {
setRadiobutton(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'チェックボックス') {
setCheckbox(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), Boolean(q_data[i][5]), selections);
j++;
} else if (q_data[i][1] == 'プルダウン') {
setDropdownlist(form, q_data[i][2], q_data[i][3],
Boolean(q_data[i][4]), selections);
j++;
}
}
// フォームの移動
let dest = ss.getSheetByName('移動先').getRange(1, 2).getValue();
if (dest) {
dest = dest.replace('https://drive.google.com/drive/folders/', '')
moveForm(form, dest);
}
Browser.msgBox("フォームの作成が完了しました。", Browser.Buttons.OK_CANCEL);
return;
}
Reference
이 문제에 관하여(GoogleSpreadSheet에서 GoogleForm을 만드는 GAS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirovirgo24/items/80b1795045550c43bd9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)