Javascript 将多张照片从google drive插入google工作表的内部单元格的代码
我能够找到一些代码并对其进行调整,以将多个IMAG上传到驱动器(多亏了tanaikech) 但我未能创建共享照片的URL并将其粘贴到谷歌电子表格中 下面是我的示例代码.gsJavascript 将多张照片从google drive插入google工作表的内部单元格的代码,javascript,google-apps-script,google-sheets,google-api,Javascript,Google Apps Script,Google Sheets,Google Api,我能够找到一些代码并对其进行调整,以将多个IMAG上传到驱动器(多亏了tanaikech) 但我未能创建共享照片的URL并将其粘贴到谷歌电子表格中 下面是我的示例代码.gs function doGet() { return HtmlService.createHtmlOutputFromFile('Index'); } function saveFile(obj) { var blob = Utilities.newBlob(Utilities.base64Decode(ob
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
function saveFile(obj) {
var blob = Utilities.newBlob(Utilities.base64Decode(obj.data), obj.mimeType, obj.fileName);
var file=DriveApp.createFile(blob);
var fileId= file.getId()
return fileId
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK,DriveApp.Permission.VIEW);
var fileUrl = "https://drive.google.com/uc?export=view&id="+fileId;
Logger.log(fileUrl);
var url="https://docs.google.com/spreadsheets/d/12bhRyuHXzcMP7AS8cHhtkp2Sa6kDObZYRT1FY13appU/edit#gid=0";
var ss= SpreadsheetApp.openByUrl(url);
var ws= ss.getSheetByName("DB");
ws.appendRow([fileUrl]);
return ContentService.createTextOutput("Success").setMimeType(ContentService.MimeType.JAVASCRIPT);
}
和my Index.html:
函数getFiles(){
常量f=document.getElementById('files');
[…f.files].forEach((文件,i)=>{
const fr=new FileReader();
fr.onload=(e)=>{
const data=e.target.result.split(“,”);
const obj={fileName:f.files[i]。名称,mimeType:data[0]。匹配(/:(\w.+);/)[1],数据:data[1]};
google.script.run.withSuccessHandler((id)=>{
console.log(id);
}).saveFile(obj);
}
fr.readAsDataURL(文件);
});
}
- 例如,当一次上载两个文件时,您希望将两个URL放在一行中
- 在脚本中,该文件是通过异步进程上载的。通过这种方式,URL被逐行放置。为了在每个上传过程中将URL放在一行中,首先需要检索URL。然后,URL被放在一行
<script>
function saveFile(f, file, i) {
return new Promise((resolve, reject) => {
const fr = new FileReader();
fr.onload = (e) => {
const data = e.target.result.split(",");
const obj = {fileName: f.files[i].name, mimeType: data[0].match(/:(\w.+);/)[1], data: data[1]};
google.script.run.withSuccessHandler((url) => resolve(url)).withFailureHandler(e => reject(e)).saveFile(obj);
};
fr.readAsDataURL(file);
});
}
async function getFiles() {
let urls = [];
const f = document.getElementById('files');
for (var i = 0; i < f.files.length; i++) {
const url = await saveFile(f, f.files[i], i).catch(e => console.log(e));
urls.push(url);
}
google.script.run.putUrls(urls);
}
</script>
修改脚本:
谷歌应用程序脚本端:Code.gs
请修改saveFile
的功能,并添加putUrls
的新功能,如下所示。请设置电子表格URL
function saveFile(obj) {
var blob = Utilities.newBlob(Utilities.base64Decode(obj.data), obj.mimeType, obj.fileName);
var file=DriveApp.createFile(blob);
var fileId= file.getId()
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK,DriveApp.Permission.VIEW);
var fileUrl = "https://drive.google.com/uc?export=view&id="+fileId;
return fileUrl;
}
function putUrls(urls) {
Logger.log(urls)
var url = "https://docs.google.com/spreadsheets/d/###/edit#gid=0"; // <--- Please set this.
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("DB");
ws.appendRow(urls);
}
函数保存文件(obj){
var blob=Utilities.newBlob(Utilities.base64Decode(obj.data)、obj.mimeType、obj.fileName);
var file=DriveApp.createFile(blob);
var fileId=file.getId()
file.setSharing(DriveApp.Access.anywhere_与链接DriveApp.Permission.VIEW);
var fileUrl=”https://drive.google.com/uc?export=view&id=“+文件ID;
返回fileUrl;
}
函数putURL(URL){
Logger.log(URL)
变量url=”https://docs.google.com/spreadsheets/d/###/edit#gid=0"; // {
const fr=new FileReader();
fr.onload=(e)=>{
const data=e.target.result.split(“,”);
const obj={fileName:f.files[i]。名称,mimeType:data[0]。匹配(/:(\w.+);/)[1],数据:data[1]};
google.script.run.withSuccessHandler((url)=>resolve(url)).withFailureHandler(e=>reject(e)).saveFile(obj);
};
fr.readAsDataURL(文件);
});
}
异步函数getFiles(){
让URL=[];
常量f=document.getElementById('files');
对于(var i=0;iconsole.log(e));
推送(url);
}
google.script.run.putURL(URL);
}
- 在这次修改中,文件是通过同步过程上传的,URL是放在一个数组中的。然后,在
处处理数组putUrls
- 修改Web应用脚本时,请将Web应用重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。
saveFile
功能中,脚本通过返回fileId
完成。这样,用于放置URL的脚本就不会运行。因此,请删除返回文件ID
。顺便说一下,在这个Javascript中,文件是通过异步过程上传的。通过这种方式,URL被逐行追加。这个怎么样?成功了,如何将多个文件的链接放置在同一行上,而不是逐行放置。谢谢你,塔奈克。你有一个很棒的图书馆。谢谢你的快速回复。关于如何将多个文件的链接放在同一行而不是一行一行。
,我无法理解。您希望在每次上载时将URL放在一行。你的问题还没有解决。我的理解正确吗?每次上传将链接粘贴到一行解决了这个问题,如果我同时上传了2个文件,则需要2行,因此链接将进入一行谢谢您的回复。我不得不为我糟糕的英语水平道歉。我仍然无法理解您当前的问题。当一次上载两个文件时,您希望将两个URL放在一行中。我的理解正确吗?它工作得很好,谢谢你建议的修改。@Aboude zoua谢谢你的回复。我很高兴你的问题解决了。