Javascript 我设法在google sheet上获得附加和上传,但不起作用……我知道这是脚本或onclick=的问题,但任何帮助都将被通知

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

我为我的团队创建了一个谷歌表单,我们需要在上面附加文件。我发现了一个我认为很有效的代码。我已经有一段时间没有编写代码了,以前也没有使用过谷歌脚本。但是从它不工作的角度来看,它一定是脚本还是onclick=on submit

google驱动器ID很好,我检查了所有的;。。。。。但我似乎无法在上传文件和运行功能时动脑

我正在使用来自的代码

脚本:上载文件

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');
}