试图将表格合并到表格中

发布于 2025-02-01 01:39:17 字数 3861 浏览 3 评论 0原文

我正在尝试构建一个应用程序脚本,该脚本将采用一大堆表格并将其答案合并到一个电子表格上。我不需要所有答案,只有是/否问题的答案,只要我知道哪个是Yes,哪个是什么格式/否答案都没有关系。否。

我已经写了下面的书,上半场收集了答案,然后下半年是我尝试将这些答案输入电子表格的尝试。据我所知,我不确定我是否不了解表格的工作原理,或者我是否不了解表的工作方式 - 任何指导都将不胜感激!

const auditReportConsol = () => {
  const folder = DriveApp.getFolderById('1Y2QgLbHncLzPDe-UCD6WizSNnHkjkt4z');

  const forms = folder.getFilesByType(MimeType.GOOGLE_FORMS);

  while (forms.hasNext()) {
    const file = forms.next();
    const form = FormApp.openById(file.getId());
    var formResponses = form.getResponses();
      for (var i = 0; i < formResponses.length; i++) {
      var formResponse = formResponses[i];
      var itemResponses = formResponse.getItemResponses();

     switch (itemResponses[i].getItem().getIndex()) {
        case 7:
         var gov1 = itemResponses[i].getResponse();
          break;
        case 9:
         var gov2 = itemResponses[i].getResponse();
         break;
        case 11:
          var gov3 = itemResponses[i].getResponse();
          break;
        case 13:
          var gov4 = itemResponses[i].getResponse();
          break;
        case 15:
          var risk1 = itemResponses[i].getResponse();
          break;
        case 17:
          var risk2 = itemResponses[i].getResponse();
          break;
        case 19:
          var risk3 = itemResponses[i].getResponse();
          break;
        case 21:
          var risk4 = itemResponses[i].getResponse();
          break;
        case 23:
          var risk5 = itemResponses[i].getResponse();
          break;
       case 25:
          var risk6 = itemResponses[i].getResponse();
          break;
        case 27:
          var breach1 = itemResponses[i].getResponse();
          break; 
        case 29:
          var breach2 = itemResponses[i].getResponse();
          break; 
        case 31:
          var breach3 = itemResponses[i].getResponse();
          break; 
        case 33:
          var asset1 = itemResponses[i].getResponse();
          break; 
        case 35:
          var asset2 = itemResponses[i].getResponse();
          break; 
        case 37:
          var asset3 = itemResponses[i].getResponse();
          break;
        case 39:
          var asset4 = itemResponses[i].getResponse();
          break; 
        case 41:
          var asset5 = itemResponses[i].getResponse();
          break; 
        case 43:
          var dsr1 = itemResponses[i].getResponse();
          break; 
        case 45:
          var dsr2 = itemResponses[i].getResponse();
          break; 
        case 47:
          var dsr3 = itemResponses[i].getResponse();
          break; 
        case 49:
          var dsr4 = itemResponses[i].getResponse();
          break; 
        case 51:
          var dsr5 = itemResponses[i].getResponse();
          break; 
        case 53:
          var dsr6 = itemResponses[i].getResponse();
          break;
        case 55:
          var dsr7 = itemResponses[i].getResponse();
          break;
        case 57:
          var dsr8 = itemResponses[i].getResponse();
          break;
        case 59:
          var dsr9 = itemResponses[i].getResponse();
          break;
        case 61:
          var access1 = itemResponses[i].getResponse();
          break;
        case 63:
          var access2 = itemResponses[i].getResponse();
          break;
        case 65:
          var access3 = itemResponses[i].getResponse();
          break;
        case 67:
          var change1 = itemResponses[i].getResponse();
          break;
        case 69:
          var change2 = itemResponses[i].getResponse();
          break;
        }
        Logger.log;
        Logger.getLog;

      }     
    }
    var ss = SpreadsheetApp.openById('1Qlv4v5dU6caBnRfa4Z58OBnoT0g3uFEmKewTENsBOLo');
    var sheet = ss.getActiveSheet();
    var newForm = sheet.appendRow([gov1],[gov2],[gov3]);

}

I'm trying to build an apps script that will take a whole bunch of forms and consolidate their answers onto one spreadsheet. I don't need all of the answers, just the ones to Yes/No questions, and it doesn't really matter what format those yes/no answers come into the spreadsheet as as long as I know which is for yes and which is for no.

I've written the below, with the first half collecting the answers, and then the second half is my attempt to get those answers into the spreadsheet. As far as I can tell, I'm not sure if I don't understand how the Forms work or if I don't understand how the sheet is working - any guidance would be much appreciated!

const auditReportConsol = () => {
  const folder = DriveApp.getFolderById('1Y2QgLbHncLzPDe-UCD6WizSNnHkjkt4z');

  const forms = folder.getFilesByType(MimeType.GOOGLE_FORMS);

  while (forms.hasNext()) {
    const file = forms.next();
    const form = FormApp.openById(file.getId());
    var formResponses = form.getResponses();
      for (var i = 0; i < formResponses.length; i++) {
      var formResponse = formResponses[i];
      var itemResponses = formResponse.getItemResponses();

     switch (itemResponses[i].getItem().getIndex()) {
        case 7:
         var gov1 = itemResponses[i].getResponse();
          break;
        case 9:
         var gov2 = itemResponses[i].getResponse();
         break;
        case 11:
          var gov3 = itemResponses[i].getResponse();
          break;
        case 13:
          var gov4 = itemResponses[i].getResponse();
          break;
        case 15:
          var risk1 = itemResponses[i].getResponse();
          break;
        case 17:
          var risk2 = itemResponses[i].getResponse();
          break;
        case 19:
          var risk3 = itemResponses[i].getResponse();
          break;
        case 21:
          var risk4 = itemResponses[i].getResponse();
          break;
        case 23:
          var risk5 = itemResponses[i].getResponse();
          break;
       case 25:
          var risk6 = itemResponses[i].getResponse();
          break;
        case 27:
          var breach1 = itemResponses[i].getResponse();
          break; 
        case 29:
          var breach2 = itemResponses[i].getResponse();
          break; 
        case 31:
          var breach3 = itemResponses[i].getResponse();
          break; 
        case 33:
          var asset1 = itemResponses[i].getResponse();
          break; 
        case 35:
          var asset2 = itemResponses[i].getResponse();
          break; 
        case 37:
          var asset3 = itemResponses[i].getResponse();
          break;
        case 39:
          var asset4 = itemResponses[i].getResponse();
          break; 
        case 41:
          var asset5 = itemResponses[i].getResponse();
          break; 
        case 43:
          var dsr1 = itemResponses[i].getResponse();
          break; 
        case 45:
          var dsr2 = itemResponses[i].getResponse();
          break; 
        case 47:
          var dsr3 = itemResponses[i].getResponse();
          break; 
        case 49:
          var dsr4 = itemResponses[i].getResponse();
          break; 
        case 51:
          var dsr5 = itemResponses[i].getResponse();
          break; 
        case 53:
          var dsr6 = itemResponses[i].getResponse();
          break;
        case 55:
          var dsr7 = itemResponses[i].getResponse();
          break;
        case 57:
          var dsr8 = itemResponses[i].getResponse();
          break;
        case 59:
          var dsr9 = itemResponses[i].getResponse();
          break;
        case 61:
          var access1 = itemResponses[i].getResponse();
          break;
        case 63:
          var access2 = itemResponses[i].getResponse();
          break;
        case 65:
          var access3 = itemResponses[i].getResponse();
          break;
        case 67:
          var change1 = itemResponses[i].getResponse();
          break;
        case 69:
          var change2 = itemResponses[i].getResponse();
          break;
        }
        Logger.log;
        Logger.getLog;

      }     
    }
    var ss = SpreadsheetApp.openById('1Qlv4v5dU6caBnRfa4Z58OBnoT0g3uFEmKewTENsBOLo');
    var sheet = ss.getActiveSheet();
    var newForm = sheet.appendRow([gov1],[gov2],[gov3]);

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笑咖 2025-02-08 01:39:17

您可以简单地列出所需字段,然后仅在最终结果行中将它们推出以显示,例如,

const auditReportConsol = () => {
  const folder = DriveApp.getFolderById('1Y2QgLbHncLzPDe-UCD6WizSNnHkjkt4z');

  const forms = folder.getFilesByType(MimeType.GOOGLE_FORMS);

  const FIELD_LIST = [7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69];

  const rows = [];

  while (forms.hasNext()) {
      const file = forms.next();
      const form = FormApp.openById(file.getId());
      var formResponses = form.getResponses();
      for (var i = 0; i < formResponses.length; i++) {
        var formResponse = formResponses[i];
        var itemResponses = formResponse.getItemResponses();

        var row = [];
        // Pick required items
        itemResponses.map( (index, item) => FIELD_LIST.indexOf(index) >=0 && row.push(item.getResponse()))

      }     
   }
   // Save rows array into sheet
   var ss = SpreadsheetApp.openById('1Qlv4v5dU6caBnRfa4Z58OBnoT0g3uFEmKewTENsBOLo');
   var sheet = ss.getActiveSheet();
   sheet.clear();
   sheet.getRange(1,1, rows.lengths, rows[0].length)

}

我也可能建议将表单/名称作为第一列以区分不同的表单:

row.unshift(form.getTitle())

You can simply list required fields, and later push only them in final result row to display, like this

const auditReportConsol = () => {
  const folder = DriveApp.getFolderById('1Y2QgLbHncLzPDe-UCD6WizSNnHkjkt4z');

  const forms = folder.getFilesByType(MimeType.GOOGLE_FORMS);

  const FIELD_LIST = [7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69];

  const rows = [];

  while (forms.hasNext()) {
      const file = forms.next();
      const form = FormApp.openById(file.getId());
      var formResponses = form.getResponses();
      for (var i = 0; i < formResponses.length; i++) {
        var formResponse = formResponses[i];
        var itemResponses = formResponse.getItemResponses();

        var row = [];
        // Pick required items
        itemResponses.map( (index, item) => FIELD_LIST.indexOf(index) >=0 && row.push(item.getResponse()))

      }     
   }
   // Save rows array into sheet
   var ss = SpreadsheetApp.openById('1Qlv4v5dU6caBnRfa4Z58OBnoT0g3uFEmKewTENsBOLo');
   var sheet = ss.getActiveSheet();
   sheet.clear();
   sheet.getRange(1,1, rows.lengths, rows[0].length)

}

I might also recommend prepending form Id/Name as first column to distinguish different forms:

row.unshift(form.getTitle())
︶葆Ⅱㄣ 2025-02-08 01:39:17

要使用链接的Google表格中的Google表格进行设置,您需要进行以下

打开每个Google表单和“响应”选项卡,请选择“创建电子表格”按钮。

然后将在保存Google表单的同一目录中创建一个新的Google表。该表将具有一个名为“表单响应”的选项卡1,

然后创建一个单独的Google表格,然后使用查询和Incortrange函数从表单响应中导入数据。

=query({importrange("GoogleSheetsID","Form responses1!A1:Z")}, "Select * WHERE Col1 is not null",1)    

如果GoogleSheetSID替换为您自己的Google Sheet ID,

则需要授予表格许可才能访问链接的文件,

可以更改末尾的选择语句以仅选择所需的列。因此,如果您希望按照该顺序2,8和1列,那就是

=query({importrange("GoogleSheetsID","Form responses 1!A1:Z")}, "Select Col2, Col8, Col1 WHERE Col1 is not null",1)   

如果您想查看多个床单,则可以使用以下公式

=QUERY({importrange("GoogleSheetsID1","Form responses1!A1:Z");importrange("GoogleSheetsID2","Form responses1!A2:Z")}, "Select Col2, Col8, Col1 WHERE Col1 is not null",1)      

在此中添加更多元素,您只需复制

InporTrange(“ GoogleSheetSid2”,“ formes响应1!a1:z”)
{}括号内的元素

To set this up using the linked Google Sheets from Google forms you would need to do the following

Open each Google Form and on the responses tab, select the Create Spreadsheet button.

Create Spreadsheet menu item

This will then create a new Google Sheet in the same directory in which the Google Form is saved. This sheet will have a tab called Form responses 1

Then create a seperate Google sheet and use the query and Importrange function to import the data from the form response.

=query({importrange("GoogleSheetsID","Form responses1!A1:Z")}, "Select * WHERE Col1 is not null",1)    

Where GoogleSheetsID is replaced with your own Google Sheet ID

You will need to give the sheet permission to access the linked file

The select statement at the end can be changed to only select the columns you want. So if you wanted columns 2,8 and 1 in that order it would be

=query({importrange("GoogleSheetsID","Form responses 1!A1:Z")}, "Select Col2, Col8, Col1 WHERE Col1 is not null",1)   

If you then want to look at multiple sheets you can then use the below formula

=QUERY({importrange("GoogleSheetsID1","Form responses1!A1:Z");importrange("GoogleSheetsID2","Form responses1!A2:Z")}, "Select Col2, Col8, Col1 WHERE Col1 is not null",1)      

To add more elements into this, you just replicate the
importrange("GoogleSheetsID2","Form responses1!A1:Z")
element within the {} brackets

薄凉少年不暖心 2025-02-08 01:39:17

以一种形式,您可以从当前的工作表中断开连接,然后连接到另一个工作表。这样,您可以在一个电子表格中收集几种表格的结果!

然后,您可以通过OnFormSubmit触发功能收集所需的信息,并将所需的信息放在一张主表中。

您可以通过这种方式识别信息的起源

function getFormUrl() {
  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet =>  console.log (sheet.getFormUrl()));
}

In a form, you can disconnect from the current worksheet and connect to another worksheet. This way you can collect the results of several forms in one spreadsheet!

Then you can collect the information you need through the onFormSubmit triggered function and put the required informations together in one master sheet.

You can identify the origin of information by this way

function getFormUrl() {
  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet =>  console.log (sheet.getFormUrl()));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文