web-dev-qa-db-ja.com

アプリスクリプトを使用してGoogleスプレッドシートデータをGoogleフォームにインポートする

私はインターネットを検索しましたが、これに対する応答もドキュメントも見つかりません。アプリのスクリプトを使用して、GoogleスプレッドシートのデータでGoogleフォームの質問を動的に生成する必要がありますが、スプレッドシートを参照して読み取る方法がわかりません。

9
Vector

かなり簡単です。ここを参照してください: https://developers.google.com/apps-script/guides/sheets#reading

Docキーでシートを開き、データを選択して、セルをJSオブジェクトとして読み取るだけです。

4
bjorke

スプレッドシートで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を選択し、スプレッドシートの変更(編集時ではなく変更時)でトリガーされるこのメソッドを追加します。

この後、スプレッドシートを変更すると、フォームオプションがリアルタイムで変更されます。

12
Nacho Coloma

これは私のために働く例です、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

他にご不明な点がありましたらお知らせください。

1
Brad