문제

저는 이 웹사이트에서 가져온 항목과 Mogsdad에서 제공한 매우 유용한 답변을 사용하여 Google 스프레드시트에서 Google 양식을 채우려고 노력하고 있지만 현재 성공하지 못하고 있습니다. 여기.

이상적으로는 다음을 찾고 있습니다.

  1. Logger.log(URL)는 스프레드시트에 저장된 모든 데이터에 대한 URL을 기록합니다. 마지막 항목을 기록하고 이를 사용하여 URL을 생성할 수 있습니까?

  2. 그러면 미리 채워진 URL이 데이터로 채워지면 자동 제출이 가능합니까?유용한 글을 찾았습니다 여기 이것은 이것이 가능하다는 것을 암시합니까?

  3. Google 스프레드시트에 저장된 데이터는 다른 Google 양식에서 캡처한 데이터입니다.이는 데이터가 있는 모든 셀을 하나로 병합하기 위해 연결 수식과 함께 Excel(인터넷 연결 부족)을 사용해야 하기 때문입니다.그런 다음 다른 Google 양식에 제출됩니다. 이것 질문에 답할 준비가 된 열별로 데이터를 분할하는 스크립트입니다.이것이 제출 시 자동 제출에 필요한 트리거에 영향을 미치나요?

제가 이것에 대해 다소 제한적으로 이해하고 있다는 점을 덧붙이고 싶습니다. 이것이 다소 쉽다고 생각된다면 쉽게 넘어가십시오!

도움이 되었습니까?

해결책

마지막 항목을 기록하고 이를 사용하여 URL을 생성할 수 있습니까?

내가 여기에서 당신을 따라갈지 잘 모르겠습니다. 다른 답변에서는 Logger.log() 성명은 배포하려는 경우 올바른 URL을 생성할 수 있음을 보여주기 위한 것이었습니다.로그하는 대신 변수의 내용을 사용하면 됩니다. url.

하지만 계속 진행하겠습니다. 왜냐하면 이것이 여러분의 길에서 조금 벗어난 것 같기 때문입니다.

그러면 미리 채워진 URL이 데이터로 채워지면 자동 제출이 가능합니까?

더 나은 출발점이 있습니다. 프로그래밍 방식으로 스프레드시트의 정보를 Google 양식에 제출할 수 있나요? 확신하는!보다 앱 스크립트를 사용하여 양식을 열고 선택.이는 "URL Tricks" 게시물에서 볼 수 있는 것보다 작업을 수행하는 더 안정적인 방법입니다.

"자동 제출" 또는 양식 제출 시뮬레이션의 경우 미리 채워진 URL에 대해 전혀 걱정할 필요가 없습니다.그것은 성가신 인간을 위한 지름길입니다.당신이 원하는 것은 payload 한 동안 POST 대신 요청하고 컴퓨터가 양식 UI를 완전히 우회하도록 합니다.

엑셀에 관한 것...이것이 제출 시 자동 제출에 필요한 트리거에 영향을 미치나요?

(아마도...) Form1을 사용하여 Spreadsheet1에 데이터를 가져온 다음 기계가 Form1에서 데이터를 분리한 후 Form2를 제출하도록 하여 Form1의 (인간?) 제출에 반응할 것으로 예상합니다.

예, Form2를 제출하기 위해 정보를 읽으려고 하기 전에 열 분할이 완료되었는지 주의해야 합니다.

Form1에서 받은 문자열을 분할한 다음 즉시 POST를 Form2로 보내는 Spreadsheet1용 양식 제출 트리거 기능을 사용하는 것이 가장 좋습니다.그런 다음 다음 기술을 사용하여 이 작업이 발생했다는 사실을 기록합니다. 스프레드시트 이메일 트리거.

다른 팁

  1. 는 데이터로 채워진 미리 채워진 URL이 자동으로 제출할 수 있습니까? 이 유용한 기사 여기 에이 작업을 수행 할 수 있음을 알 수있는

mogsdad가

더 나은 출발점이 있습니다. 프로그래밍 방식으로 스프레드 시트에서 Google 형식으로 정보를 제출할 수 있습니까? 확실한!

님이 편집 앱 스크립트를 사용하여 양식을 열고 선택을 선택하십시오 , 페이로드 / 포스트 방법이 쓸모 없게됩니다. 대안은 양식 앱 서비스를 사용하는 것입니다. 아래는 1 1 1 1" /stackoverflow.com/users/1677912/mogsdad">mogsdad 사전 채워진 URL 생성 및 독립 실행 형 Google 스크립트 프로젝트 파일에서 사용되는 대신 응답을 제출하려면

변경된 원래 코드 행은 주석 처리됩니다. 또한 가로 스크롤 막대를 피하기 위해 일부 분리 라인을 삽입했습니다.

/**
 * Use Form API to populate form
 * 
 * Addapted from https://stackoverflow.com/a/26395487/1677912
 */
function populateFormResponses() {
  //var ss = SpreadsheetApp.getActive();
  var id = '11KDxp1C6jAZaTMNlGHke8zEzQ7aZrFSFGABdwUHEV80';
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("Form Responses 1");
  var data = ss.getDataRange().getValues();  // Data for pre-fill
  var headers = data[0];                     // Sheet headers == form titles (questions)

  var formUrl = ss.getFormUrl();             // Use form attached to sheet
  var form = FormApp.openByUrl(formUrl);
  var items = form.getItems();
  //var urlCol = headers.indexOf("Prefilled URL");   // If there is a column labeled this
                                                     // way, we'll update it

  // Skip headers, then build URLs for each row in Sheet1.
  for (var row = 1; row < data.length; row++ ) {
    //Logger.log("Generating pre-filled URL from spreadsheet for row="+row);
    Logger.log("Generating response from spreadsheet for row="+row);
    // build a response from spreadsheet info.
    var response = form.createResponse();
    for (var i=0; i<items.length; i++) {
      var ques = items[i].getTitle();           // Get text of question for item
      var quesCol = headers.indexOf(ques);      // Get col index that contains this 
                                                // question
      var resp = ques ? data[row][quesCol] : "";
      var type = items[i].getType().toString();
      Logger.log("Question='"+ques+"', resp='"+resp+"' type:"+type);
      // Need to treat every type of answer as its specific type.
      switch (items[i].getType()) {
        case FormApp.ItemType.TEXT:
          var item = items[i].asTextItem();
          break;
        case FormApp.ItemType.PARAGRAPH_TEXT: 
          item = items[i].asParagraphTextItem();
          break;
        case FormApp.ItemType.LIST:
          item = items[i].asListItem();
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item = items[i].asMultipleChoiceItem();
          break;
        case FormApp.ItemType.CHECKBOX:
          item = items[i].asCheckboxItem();
          // In a form submission event, resp is an array, containing CSV strings. Join 
          // into 1 string.
          // In spreadsheet, just CSV string. Convert to array of separate choices, ready 
          // for createResponse().
          if (typeof resp !== 'string')
            resp = resp.join(',');      // Convert array to CSV
          resp = resp.split(/ *, */);   // Convert CSV to array
          break;
        case FormApp.ItemType.DATE:
          item = items[i].asDateItem();
          resp = new Date( resp );
          break;
        case FormApp.ItemType.DATETIME:
          item = items[i].asDateTimeItem();
          resp = new Date( resp );
          break;
        default:
          item = null;  // Not handling DURATION, GRID, IMAGE, PAGE_BREAK, SCALE, 
                        // SECTION_HEADER, TIME
          break;
      }
      // Add this answer to our pre-filled URL
      if (item) {
        var respItem = item.createResponse(resp);
        response.withItemResponse(respItem);
      }
      // else if we have any other type of response, we'll skip it
      else Logger.log("Skipping i="+i+", question="+ques+" type:"+type);
    }

    // Submit response
    response.submit();

    // Generate the pre-filled URL for this row
    //var editResponseUrl = response.toPrefilledUrl();

    // If there is a "Prefilled URL" column, update it
    //if (urlCol >= 0) {
    //  var urlRange = sheet.getRange(row+1,urlCol+1).setValue(editResponseUrl);
    //}
  }
};
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top