【发布时间】:2021-11-07 15:46:15
【问题描述】:
专门用于将文件上传到谷歌驱动器,以包含要保存在谷歌工作表中的文本字段数据。
哪位好心人能帮帮我:(
这是我的电子表格中的内容:
这是 GAS 代码:
var sheetName = 'Sheet1'
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost(e) {
const folderId = "root"; // Folder ID which is used for putting the file.
const blob = Utilities.newBlob(
JSON.parse(e.postData.contents),
e.parameter.mimeType,
e.parameter.filename
);
const file = DriveApp.getFolderById(folderId).createFile(blob);
const responseObj = {
filename: file.getName(),
fileId: file.getId(),
fileUrl: file.getUrl(),
};
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var range = sheet.getRange("A1:A").getValues();
var filtered_r = range.filter(String).length;
var newRow = headers.map(function(header) { // newRow is possibly a literally object where the keys are the headers and values are the user input
if(header === "file"){
e.parameter[header] = responseObj.fileUrl;
}
return e.parameter[header];
})
sheet.getRange(filtered_r + 1, 1, 1, newRow.length).setValues([newRow]);
return ContentService.createTextOutput(
JSON.stringify(responseObj)
).setMimeType(ContentService.MimeType.JSON);
}
这是外部html代码(不是在GAS项目中制作的,这就是我不能使用google.script.run方法的原因)
<form id="form">
<input type="text" name="hobby">
<input name="file" id="uploadfile" type="file" />
<input id="submit" type="submit" />
</form>
<script>
const form = document.getElementById("form");
form.addEventListener("submit", (e) => {
e.preventDefault();
const file = form.file.files[0];
const fr = new FileReader();
fr.readAsArrayBuffer(file);
fr.onload = (f) => {
const url = "https://script.google.com/macros/s/###/exec"; // Please set the URL of Web Apps.
const qs = new URLSearchParams({
filename: file.name,
mimeType: file.type,
});
fetch(`${url}?${qs}`, {
method: "POST",
body: JSON.stringify([...new Int8Array(f.target.result)]), // is it possible to change this value to new FormData(form)?
})
.then((res) => res.json())
.then(console.log)
.catch(console.log);
};
});
</script>
【问题讨论】:
-
使用 web 应用程序和从外部网站执行此操作有很大区别,归结为您知道多少 javascript。
-
有问题吗?见minimal reproducible example——尤其是关于“描述”的部分
-
首先,对于我的示例脚本对您的情况没有用处,我深表歉意。对于您的问题,我提出了一个修改后的脚本作为答案。你能确认一下吗?如果这没有用,我再次道歉。
标签: javascript html google-apps-script