Apps 脚本将两个函数的值附加到同一行

Apps Script append values from two functions to the same row

我在 Apps 脚本中有两个函数,都将值写入我的 Google Sheet。我想让他们在同一行。我尝试使用

sheet.getLastRow().setValues(sheet.appendRow([obj.name, obj.mimeType, obj.id, Utilities.formatDate(new Date(), "GMT+8:00", "yyyy-MM-dd'T'HH:mm:ss'Z'")]) 

但是没有用。

这是我的代码,我试图从我之前的问题 () 改编而来: Code.gs

function doGet() {
  return HtmlService.createTemplateFromFile('index').evaluate(); 
}

function getAuth() {
  // DriveApp.createFile() // This is used for adding the scope of "https://www.googleapis.com/auth/drive".
  return ScriptApp.getOAuthToken();
}

function update(formObject) {
   SpreadsheetApp.getActiveSpreadsheet()
   .getSheets()[0]
   .appendRow([formObject.myName]);   
}

function putFileInf(obj) {
    SpreadsheetApp.getActiveSpreadsheet()
      .getSheets()[0]
      .appendRow([obj.name, obj.mimeType, obj.id, Utilities.formatDate(new Date(), "GMT+8:00", "yyyy-MM-dd'T'HH:mm:ss'Z'")]);
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form id="fr">
      <input type="text" name="myName">
      <input type="file" id="file1" />
      <input type="file" id="file2" />
      <input type="button" onclick="run()" value="Upload" />  
    </form>
    <div id="progress"></div>

<script src="https://cdn.jsdelivr.net/gh/tanaikech/ResumableUploadForGoogleDrive_js@master/resumableupload_js.min.js"></script>
<script>
function run() {
  google.script.run.withSuccessHandler(accessToken => ResumableUploadForGoogleDrive(accessToken)).getAuth();
  
}

function ResumableUploadForGoogleDrive(accessToken) {
  const f1 = document.getElementById("file1").files[0];
  const f2 = document.getElementById("file2").files[0];
  const fObj = document.getElementById("fr");
  [f1, f2].forEach((file, i) => {
    if (!file) return;
    let fr = new FileReader();
    fr.fileName = file.name;
    fr.fileSize = file.size;
    fr.fileType = file.type;
    fr.readAsArrayBuffer(file);
    fr.onload = e => {
      var id = "p" + ++i;
      var div = document.createElement("div");
      div.id = id;
      document.getElementById("progress").appendChild(div);
      document.getElementById(id).innerHTML = "Initializing.";
      const f = e.target;
      const resource = { fileName: f.fileName, fileSize: f.fileSize, fileType: f.fileType, fileBuffer: f.result, accessToken: accessToken, folderId: "1NbwjLmYXyXjkIV1SjQL3ThnO97kssrcc" };
      const ru = new ResumableUploadToGoogleDrive();
      ru.Do(resource, function (res, err) {
        if (err) {
          console.log(err);
          return;
        }
        console.log(res);
        let msg = "";
        if (res.status == "Uploading") {
          msg = Math.round((res.progressNumber.current / res.progressNumber.end) * 100) + "% (" + f.fileName + ")";
        } else {
          msg = res.status + " (" + f.fileName + ")";
        }

          if (res.status == "Done") {
            google.script.run.update(fObj);
            google.script.run.putFileInf(res.result);
            
          }

        document.getElementById(id).innerText = msg;
      });
    };
  });
}


</script>
</body>
</html>

我想到的一个例子: 假设用户输入姓名 (myName) 作为 Linda,然后上传文件名为 'pic.jpg' 的照片。我想在GoogleSheet中打印出'Linda pic.jpg'。但我现在拥有的是:

琳达

pic.jpg

如果您有任何建议,我将不胜感激!祝你有美好的一天:))

在你的脚本中,做如下修改怎么样?在本次修改中,你的HTML&javascript被修改了

修改后的脚本:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form id="fr">
      <input type="text" id="name" name="myName"> <!-- Modified -->
      <input type="file" id="file1" />
      <input type="file" id="file2" />
      <input type="button" onclick="run()" value="Upload" />  
    </form>
    <div id="progress"></div>

<script src="https://cdn.jsdelivr.net/gh/tanaikech/ResumableUploadForGoogleDrive_js@master/resumableupload_js.min.js"></script>
<script>
function run() {
  google.script.run.withSuccessHandler(accessToken => ResumableUploadForGoogleDrive(accessToken)).getAuth();
  
}

function ResumableUploadForGoogleDrive(accessToken) {
  const f1 = document.getElementById("file1").files[0];
  const f2 = document.getElementById("file2").files[0];
  const name = document.getElementById("name").value; // Modified
  [f1, f2].forEach((file, i) => {
    if (!file) return;
    let fr = new FileReader();
    fr.fileName = file.name;
    fr.fileSize = file.size;
    fr.fileType = file.type;
    fr.readAsArrayBuffer(file);
    fr.onload = e => {
      var id = "p" + ++i;
      var div = document.createElement("div");
      div.id = id;
      document.getElementById("progress").appendChild(div);
      document.getElementById(id).innerHTML = "Initializing.";
      const f = e.target;
      const resource = { fileName: f.fileName, fileSize: f.fileSize, fileType: f.fileType, fileBuffer: f.result, accessToken: accessToken, folderId: "root" };
      const ru = new ResumableUploadToGoogleDrive();
      ru.Do(resource, function (res, err) {
        if (err) {
          console.log(err);
          return;
        }
        console.log(res);
        let msg = "";
        if (res.status == "Uploading") {
          msg = Math.round((res.progressNumber.current / res.progressNumber.end) * 100) + "% (" + f.fileName + ")";
        } else {
          msg = res.status + " (" + f.fileName + ")";
        }

          if (res.status == "Done") {
            res.result.name = name; // Added
            google.script.run.putFileInf(res.result);
          }

        document.getElementById(id).innerText = msg;
      });
    };
  });
}


</script>
</body>
</html>
  • 在此修改中,值是从文本输入标签中检索的。并且,将其包含在 res.result 中。由此,.appendRow([obj.name, obj.mimeType, obj.id, Utilities.formatDate(new Date(), "GMT+8:00", "yyyy-MM-dd'T'HH:mm:ss'Z'")])obj.name 的值为 name

  • 在这种情况下,Google Apps 脚本端的 update 未被使用。