私はインターネットを検索しましたが、これに対する応答もドキュメントも見つかりません。アプリのスクリプトを使用して、GoogleスプレッドシートのデータでGoogleフォームの質問を動的に生成する必要がありますが、スプレッドシートを参照して読み取る方法がわかりません。
かなり簡単です。ここを参照してください: https://developers.google.com/apps-script/guides/sheets#reading
Docキーでシートを開き、データを選択して、セルをJSオブジェクトとして読み取るだけです。
スプレッドシートでTools > Script Editor
を選択し、必要に応じてこれを調整します。
/**
After any change in the sheet, update the combobox options in the Form
*/
function onChange(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getDataRange();
var values = range.getValues();
var comboValues = []; // <-- cheddar will go here
// in this example we are interested in column 0 and discarding row 1 (the titles)
for (var i = 1; i <= values.length; i++) {
var v = values[i] && values[i][0];
v && comboValues.Push(v)
}
// Sort the values alphabetically, case-insensitive
comboValues.sort(
function(a, b) {
if (a.toLowerCase() < b.toLowerCase()) return -1;
if (a.toLowerCase() > b.toLowerCase()) return 1;
return 0;
}
);
Logger.log(comboValues);
// Use your form ID here. You can get it from the URL
var form = FormApp.openById('<my-form-id>');
/*
Uncomment this to display the item IDs
and pick the one that you want to modify
var items = form.getItems();
for (i = 0; i < items.length; i++) {
Logger.log("ID: " + items[i].getId(), ': ' + items[i].getType());
}
*/
form.getItemById(807137578).asListItem().setChoiceValues(comboValues);
};
デバッグするには、コンボボックスでスクリプトを選択し、「再生」または「デバッグ」をクリックします。初めて、スプレッドシートとフォームを操作する権限を与える必要があります。
結果に満足したら、エディターでResources > Triggers for the active project
を選択し、スプレッドシートの変更(編集時ではなく変更時)でトリガーされるこのメソッドを追加します。
この後、スプレッドシートを変更すると、フォームオプションがリアルタイムで変更されます。
これは私のために働く例です、plsは親切にチェックします:
function getSpreadsheetData(sheetId) {
// This function gives you an array of objects modeling a worksheet's tabular data, where the first items — column headers — become the property names.
var arrayOfArrays = SpreadsheetApp.openById(sheetId).getDataRange().getValues();
var headers = arrayOfArrays.shift();
return arrayOfArrays.map(function (row) {
return row.reduce(function (memo, value, index) {
if (value) {
memo[headers[index]] = value;
}
return memo;
}, {});
});
}
function makeOurForm() {
var sheetId='input_your_sheet_id'
getSpreadsheetData(sheetId).forEach(function (row) {
// Set your form template as follows
var formName=row.Name
// Create your form programmatically, each row means one form
var form = FormApp.create(formName)
form.setDescription('xxx');
var capitalizedName = row.Name.charAt(0).toUpperCase() + row.Name.slice(1);
form.addSectionHeaderItem().setTitle(capitalizedName);
var item = form.addMultipleChoiceItem();
item.setTitle('xxx')
.setChoices([
item.createChoice('xxx'),
]);
form.addParagraphTextItem().setTitle('xxx');
});
}
たとえば、次のようにURLからシートIDを取得できます。
https://docs.google.com/spreadsheets/d/YourSheetId/ edit#gid = 0
他にご不明な点がありましたらお知らせください。