Javascript 我设法在google sheet上获得附加和上传,但不起作用……我知道这是脚本或onclick=的问题,但任何帮助都将被通知
我为我的团队创建了一个谷歌表单,我们需要在上面附加文件。我发现了一个我认为很有效的代码。我已经有一段时间没有编写代码了,以前也没有使用过谷歌脚本。但是从它不工作的角度来看,它一定是脚本还是onclick=on submit google驱动器ID很好,我检查了所有的;。。。。。但我似乎无法在上传文件和运行功能时动脑 我正在使用来自的代码 脚本:上载文件Javascript 我设法在google sheet上获得附加和上传,但不起作用……我知道这是脚本或onclick=的问题,但任何帮助都将被通知,javascript,html,jquery,google-apps-script,google-sheets,Javascript,Html,Jquery,Google Apps Script,Google Sheets,我为我的团队创建了一个谷歌表单,我们需要在上面附加文件。我发现了一个我认为很有效的代码。我已经有一段时间没有编写代码了,以前也没有使用过谷歌脚本。但是从它不工作的角度来看,它一定是脚本还是onclick=on submit google驱动器ID很好,我检查了所有的;。。。。。但我似乎无法在上传文件和运行功能时动脑 我正在使用来自的代码 脚本:上载文件 Folder_Id = '1dsUl22eeCPSE7-Lpa7VGkR3Jx5TaLc5z' function onOpen(e){ va
Folder_Id = '1dsUl22eeCPSE7-Lpa7VGkR3Jx5TaLc5z'
function onOpen(e){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var menuEntries = [];
menuEntries.push({name: "File", functionName: "doGet"});
ss.addMenu("Attach", menuEntries);
}
function upload(obj) {
var file = DriveApp.getFolderById(Folder_Id).createFile(obj.upload);
var activeSheet = SpreadsheetApp.getActiveSheet();
var File_name = file.getName()
var value = 'hyperlink("' + file.getUrl() + '";"' + File_name + '")'
var activeSheet = SpreadsheetApp.getActiveSheet();
var selection = activeSheet.getSelection();
var cell = selection.getCurrentCell()
cell.setFormula(value)
return {
fileId: file.getId(),
mimeType: file.getMimeType(),
fileName: file.getName(),
};
}
function doGet(e) {
var activeSheet = SpreadsheetApp.getActiveSheet();
var selection = activeSheet.getSelection();
var cell = selection.getCurrentCell();
var html = HtmlService.createHtmlOutputFromFile('upload');
SpreadsheetApp.getUi().showModalDialog(html, 'Upload File');
}
html file with it
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<form> <!-- Modified -->
<div id="progress" ></div>
<input type="file" name="upload" id="file">
<input type="button" value="Submit" class="action" onclick="form_data(this.parentNode)" >
<input type="button" value="Close" onclick="google.script.host.close()" />
</form>
<script>
function form_data(obj){ // Modified
google.script.run.withSuccessHandler(closeIt).upload(obj);
};
function closeIt(e){ // Modified
console.log(e);
google.script.host.close();
};
</script>
</body>
</html>
Folder_Id='1dsUl22eeCPSE7-Lpa7VGkR3Jx5TaLc5z'
功能开启(e){
var ss=SpreadsheetApp.getActiveSpreadsheet()
var指数=[];
push({name:“File”,functionName:“doGet”});
ss.添加菜单(“附加”,菜单);
}
功能上传(obj){
var file=DriveApp.getFolderById(文件夹Id).createFile(obj.upload);
var activeSheet=SpreadsheetApp.getActiveSheet();
var File_name=File.getName()
var值='hyperlink('+file.getUrl()++';“'+file_name++'”)
var activeSheet=SpreadsheetApp.getActiveSheet();
var selection=activeSheet.getSelection();
var cell=selection.getCurrentCell()
cell.setFormula(值)
返回{
fileId:file.getId(),
mimeType:file.getMimeType(),
文件名:file.getName(),
};
}
函数doGet(e){
var activeSheet=SpreadsheetApp.getActiveSheet();
var selection=activeSheet.getSelection();
var cell=selection.getCurrentCell();
var html=HtmlService.createHtmlOutputFromFile('upload');
SpreadsheetApp.getUi().showModalDialog(html,“上传文件”);
}
包含它的html文件
函数形式_数据(obj){//修改
google.script.run.withSuccessHandler(closeIt.upload)(obj);
};
函数closeIt(e){//Modified
控制台日志(e);
google.script.host.close();
};
再次非常感谢你 很抱歉,我在理解这个问题时遇到了困难,因为我正在查看一段仍在Rhino下运行的旧代码。我知道。。。愚蠢,但无论如何,我终于看到了老编辑的错误或我的方式 这就是我经过一番胡闹后得到的结果 HTML:(文件:ah1.HTML)
似乎是由于新版本的谷歌脚本V8
很多事情都不一样了……无法使用obj你得到的错误是什么,什么函数中的哪一行导致了错误?我也在想同样的事情……我在google sheet脚本中添加了脚本……开始的时候,自从我接触编码已经5年了,就什么都没有出现。我花了一整天的时间解决问题,用我最大的能力重新阅读,然后在谷歌表单上运行。当前代码运行,“附加按钮”显示在菜单上。当我点击它时,它触发的非常好。但问题是当我试图上传任何文档、文件、img并按submit时。我不认为onclick=“form_data(this.parentNode)正在工作或使函数启动。是什么引入了
google.script
?@TJ执行开始,然后执行完成……否error@MetaMan当我按run no err时,代码运行正常。我刷新工作表和“附加”“按钮现在按我的要求显示。当我按下“附加”按钮时,另一个弹出窗口出现,允许我从桌面上传文件、文档、img。问题是当我按下“提交”按钮时,我似乎无法确认/上传文件。假设trigger onclick=“form_data(this.parentNode)”哦,哇,谢谢……我用这些代码替换了HTML文件和GS文件,但不幸的是它不起作用。我是不是做错了什么让它工作了?非常感谢。当我尝试执行代码时,现在出现了以下错误:TypeError:无法读取未定义的processFormX@Script1.gs:4的属性“bytes”。。。。。obj变量没有解析?我今天将研究它。在接下来的几天里,我将更新我所有的上传问题。但我只是将整个脚本加载到我的帐户中,在更新folderId之后,它就工作了。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="formdiv">
<form id="myForm">
<input type="file" name="myfile" />
<input type="button" value="UpLoad" id="upl" />
</form>
<input type="button" value="Close" id="close" />
</div>
<script>
window.onload = function() {
document.getElementById("upl").addEventListener('click', processFormJS,false);
document.getElementById("close").addEventListener('click',function(){google.script.host.close();},false)
}// I added this because I want to start using listeners
function processFormJS() {
const formData = document.getElementById("myForm");
console.log(formData);
const file = formData.myfile.files[0];
const fr = new FileReader();//this is the key change to this side
fr.onload = function(e) {
const obj = {filename: file.name,mimeType:file.type,bytes:[...new Int8Array(e.target.result)]};
google.script.run
.withSuccessHandler(function(){google.script.host.close();})
.processFormX(obj);
console.log(obj);
};
fr.readAsArrayBuffer(file);
}
console.log('MyCode');
</script>
</body>
</html>
function processFormX(obj) {
const fileBlob = Utilities.newBlob(obj.bytes, obj.mimeType, obj.filename);//this is the key change to this side
const folder = DriveApp.getFolderById('folderId');/edit folderid
folder.createFile(fileBlob);
return;
}
function launchmydialog() {
var ss = SpreadsheetApp.getActive();
var html = HtmlService.createHtmlOutputFromFile('ah1');//edit filename
SpreadsheetApp.getUi().showModelessDialog(html, 'Upload File');
}