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
未被使用。
我在 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'")])
但是没有用。
这是我的代码,我试图从我之前的问题 (
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
未被使用。