Загрузить файл в Google Sheet - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь загрузить файл PDF на Google Диск и вставить ссылку на файл в Google Sheets. Вот это ajax:

    $.ajax({
    type: 'POST',
    url: 'https://script.google.com/macros/s/AKfycbxyjjBv84uONFouZaiNeC2xwoMPP3p-3dzYxbQBCbJnEza0aPn-/exec',
    data: serializedData,
    success: function(result) {
    var myMessage = $(document.activeElement).attr('id');
    $('#sucessMessage2').html('<div class=\"successActive\">Your application has been successfully sent</div>');
    document.getElementById("regform").reset();
    },
    error : function(error) {
    alert('Error: Something went wrong. Please refresh the page and try again');
    }
});

Вот это HTML:

    <form id="regform">
    <input id="FirstName" tabindex="1" name="FirstName" type="text" placeholder="First Name *" />
    <input id="LastName" tabindex="2" name="LastName" type="text" placeholder="Last Name *" />
    <input id="Occupation" tabindex="3" name="Occupation" type="text" placeholder="Occupation" />
    <input name="Resume" type="file" tabindex="4" /><br/>
    <div class="successMessage" id="sucessMessage2"></div>
    <input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" value="Submit Application to Rent" />
    </form>

И Code.gs:

    var SHEET_NAME = "Sheet1";
    var SCRIPT_PROP = PropertiesService.getScriptProperties(); // new property service
    function doGet(e){
    return handleResponse(e);
    }

    function doPost(e){
    return handleResponse(e);
    }

    function handleResponse(e) {
    var lock = LockService.getPublicLock();
    lock.waitLock(30000);  // wait 30 seconds before conceding defeat.

    try {
    var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
    var sheet = doc.getSheetByName(SHEET_NAME);
    var headRow = e.parameter.header_row || 1;
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow()+1; // get next row
    var row = [];
    for (i in headers){
    if (headers[i] == "Timestamp"){ // special case if you include a 'Timestamp' column
    row.push(new Date());
    } else { // else use header name to get data
    row.push(e.parameter[headers[i]]);
    }
    }
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
    return ContentService
    .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
    .setMimeType(ContentService.MimeType.JSON);
    } catch(e){
    return ContentService
    .createTextOutput(JSON.stringify({"result":"error", "error": e}))
    .setMimeType(ContentService.MimeType.JSON);
    } finally { //release lock
    lock.releaseLock();
    }
    }
    function setup() {
    var doc = SpreadsheetApp.getActiveSpreadsheet();
    SCRIPT_PROP.setProperty("key", doc.getId());
}

Все заполнено в Google Sheet, но я не знаю, как получить резюме для загрузки на Google Drive и добавить ссылку на Google Sheet.

1 Ответ

0 голосов
/ 12 февраля 2020

Вы можете загрузить файл на диск с комбинацией FileReader и google.script.run следующим образом:

  1. Изменить <input name="Resume" type="file" tabindex="4" /><br/>

до

<input id = "pdf" name="Resume" type="file" tabindex="4" /><br/>

Изменить

<input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" value="Submit Application to Rent" />

до

<input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" onClick="formSubmit()" value="Submit Application to Rent" />

Напишите функцию javascript:
function formSubmit() {
  var pdf = document.getElementById("pdf").files[0];
  var reader  = new FileReader();
    if (pdf) {
        reader.readAsDataURL(pdf); 
        reader.onloadend = function () {
           google.script.run.getResume(reader.result);
          }           
     }       
}
В Code.gs добавить функцию
function getResume(pdf){   
  var mimeType = pdf.substring(5,pdf.indexOf(';'));
  var bytes = Utilities.base64Decode(pdf.substr(pdf.indexOf('base64,')+7));
  var title='my_pdf';
  var blob = Utilities.newBlob(bytes, mimeType, title);
  var file=DriveApp.createFile(blob);    
  var link = file.getUrl();
  Logger.log(link);
}
Интегрируйте link в существующий код по желанию, например, pu sh, в row и в электронную таблицу.

Объяснение: Вы преобразуете с FileReader содержимое файла PDF в URL данных. Сценарий Apps может использовать этот URL-адрес данных для чтения файла в виде большого двоичного объекта и преобразования большого двоичного объекта в файл на вашем диске.

UPDATE

Пример полной передачи данных формы с google.script.run без Ajax:

Индекс. html:

<form id="regform">
<input id="FirstName" tabindex="1" name="FirstName" type="text" placeholder="First Name *" />
<input id="LastName" tabindex="2" name="LastName" type="text" placeholder="Last Name *" />
<input id="Occupation" tabindex="3" name="Occupation" type="text" placeholder="Occupation" />
<input id = "pdf" name="Resume" type="file" tabindex="4" /><br/>
<input class="btn-submit" id="submitFormTwo" tabindex="5" type="submit" onClick="formSubmit()" value="Submit Application to Rent" />
    </form>
<script>
function formSubmit() {
  var firstName = document.getElementById("FirstName").value;
  var lastName = document.getElementById("LastName").value;
  var occupation = document.getElementById("Occupation").value;
  var pdf = document.getElementById("pdf").files[0];
  var reader  = new FileReader();
    if (pdf) {
        reader.readAsDataURL(pdf); 
        reader.onloadend = function () {
           google.script.run.withSuccessHandler(success).withFailureHandler(error).getResume(firstName, lastName, occupation, reader.result);
          }           
     }       
}
function success(){
alert ("Your application has been successfully sent");
}
function error(){
alert ("There was an error");
} 
</script>

Code.gs

function doGet(){
  return HtmlService.createHtmlOutput("index.html");
}
function getResume(firstName, lastName, occupation, pdf){ 
  var mimeType = pdf.substring(5,pdf.indexOf(';'));
  var bytes = Utilities.base64Decode(pdf.substr(pdf.indexOf('base64,')+7));
  var title='my_pdf';
  var blob = Utilities.newBlob(bytes, mimeType, title);
  var file=DriveApp.createFile(blob);    
  var link = file.getUrl();
  var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
  var sheet = doc.getSheetByName(SHEET_NAME);  
  var values = [firstName, lastName, occupation, link];
  var nextRow = sheet.getLastRow()+1;
  sheet.getRange(nextRow, 1, 1, values.length).setValues([values]);

}

function setup() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  SCRIPT_PROP.setProperty("key", doc.getId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...