- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将文件上传到特定的谷歌驱动器文件夹,同时将表单数据上传到电子表格中。此代码的电子表格部分有效,但文件上传功能无效。任何解决此问题的帮助将不胜感激。
代码.gs
var submissionSSKey = 'SS ID';
function doGet(e) {
var template = HtmlService.createTemplateFromFile('Form.html');
template.action = ScriptApp.getService().getUrl();
return template.evaluate();
}
function doPost(e) {
var template = HtmlService.createTemplateFromFile('Thanks.html');
var LoanType = template.name = e.parameter.name;
var borrower = template.department = e.parameter.department;
var amount = template.message = e.parameter.message;
var emailed = template.email = e.parameter.email;
var comp = 'N/A'
var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
var lastRow = sheet.getLastRow();
var targetRange = sheet.getRange(lastRow+1, 1, 1, 5).setValues([[comp,LoanType,borrower,amount,emailed]]);
var fileBlob = e.paramater.thefile
var doc = DriveApp.getFolderById('folder ID');
doc.createFile(fileBlob)//.rename('New Name');
return template.evaluate();
}
Form.html
<html>
<head>
<title></title>
</head>
<body>
<form action="<?= action ?>" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="1" cellspacing="0" style="width: 500px;">
<tbody>
<tr>
<td>
Name:</td>
<td>
<input name="name" type="text" /></td>
</tr>
<tr>
<td>
Department:</td>
<td>
<select name="department">
<option>Select Option</option>
<option>Cashier</option>
<option>Greeter</option>
<option>Runner</option>
<option>Line Control</option>
<option>IDB</option>
<option>Unknown</option>
</select></td>
</tr>
<tr>
<td>
Email:</td>
<td>
<input name="email" type="text" /></td>
</tr>
<tr>
<td>
Message:</td>
<td>
<textarea name="message" style="margin: 2px; height: 148px; width: 354px;"></textarea></td>
</tr>
<tr>
<td>
<p>
School Schedule (Image Files Only):</p>
</td>
<td>
<p>
<input type="file" id="thefile" name="thefile">
</p></td>
</tr>
<tr>
<td>
<input type="submit" value="Submit" /></td>
<td>
You will receive an email confirmation upon submission</td>
</tr>
</tbody>
</table>
</form></body>
</html>
Thanks.html
<html>
<body>
<h1>Thanks</h1>
<p>Thank you for your submission.</p>
Name: <?= name ?><br/>
Department: <?= department ?><br/>
Message: <?= message ?><br/>
Email: <?= email ?><br/>
</body>
</html>
最佳答案
编辑:工作示例
HtmlService 不支持 HTML 表单的 post
方法。表单收集的输入元素可以使用处理函数传递给服务器端函数。有关详细信息,请参阅 HTML Service: Communicate with Server Functions .
这是一个基于您在问题中发布的代码的示例。
<script>
// Javascript function called by "submit" button handler,
// to show results.
function updateOutput(resultHtml) {
toggle_visibility('inProgress');
var outputDiv = document.getElementById('output');
outputDiv.innerHTML = resultHtml;
}
// From blog.movalog.com/a/javascript-toggle-visibility/
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
</script>
<div id="formDiv">
<!-- Form div will be hidden after form submission -->
<form id="myForm">
Name: <input name="name" type="text" /><br/>
Department: <select name="department">
<option>Select Option</option>
<option>Cashier</option>
<option>Greeter</option>
<option>Runner</option>
<option>Line Control</option>
<option>IDB</option>
<option>Unknown</option>
</select><br/>
Email: <input name="email" type="text" /><br/>
Message: <textarea name="message" style="margin: 2px; height: 148px; width: 354px;"></textarea><br/>
School Schedule (Image Files Only): <input name="myFile" type="file" /><br/>
<input type="button" value="Submit"
onclick="toggle_visibility('formDiv'); toggle_visibility('inProgress');
google.script.run
.withSuccessHandler(updateOutput)
.processForm(this.parentNode)" />
</form>
</div>
<div id="inProgress" style="display: none;">
<!-- Progress starts hidden, but will be shown after form submission. -->
Uploading. Please wait...
</div>
<div id="output">
<!-- Blank div will be filled with "Thanks.html" after form submission. -->
</div>
<div>
<h1>Thanks</h1>
<p>Thank you for your submission.</p>
Name: <?= name ?><br/>
Department: <?= department ?><br/>
Message: <?= message ?><br/>
Email: <?= email ?><br/>
File URL: <?= fileUrl ?><br/>
</div>
var submissionSSKey = '--Spreadsheet-key--';
var folderId = "--Folder-Id--";
function doGet(e) {
var template = HtmlService.createTemplateFromFile('Form.html');
template.action = ScriptApp.getService().getUrl();
return template.evaluate();
}
function processForm(theForm) {
var fileBlob = theForm.myFile;
var folder = DriveApp.getFolderById(folderId);
var doc = folder.createFile(fileBlob);
// Fill in response template
var template = HtmlService.createTemplateFromFile('Thanks.html');
var name = template.name = theForm.name;
var department = template.department = theForm.department;
var message = template.message = theForm.message;
var email = template.email = theForm.email;
var fileUrl = template.fileUrl = doc.getUrl();
// Record submission in spreadsheet
var sheet = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
var lastRow = sheet.getLastRow();
var targetRange = sheet.getRange(lastRow+1, 1, 1, 5).setValues([[name,department,message,email,fileUrl]]);
// Return HTML text for display in page.
return template.evaluate().getContent();
}
原始答案,侧重于基本调试:
这段代码最初来自哪里?已有multiple questions about it ,查看原始教程或示例可能会有所帮助。
当您将此代码作为已发布的 Web 应用运行并提交文件时,您收到的错误是 TypeError: Cannot read property "thefile"from undefined.
您的代码中使用了一个 undefined
对象。那是什么物体?还不知道,但线索是代码正在寻找一个名为 "thefile"
的属性。
如果您在编辑器中打开了脚本,并从那里启动了 web 应用程序(通过单击“发布/部署为 Web 应用程序”对话框中的测试您最新代码的 web 应用程序
),那么您还可以查看执行记录以了解更多详细信息。 (在“查看”菜单下)您会发现它包含如下内容:
[13-12-25 07:49:12:447 EST] Starting execution
[13-12-25 07:49:12:467 EST] HtmlService.createTemplateFromFile([Thanks.html]) [0 seconds]
[13-12-25 07:49:12:556 EST] SpreadsheetApp.openById([--SSID--]) [0.089 seconds]
[13-12-25 07:49:12:557 EST] Spreadsheet.getSheets() [0 seconds]
[13-12-25 07:49:12:626 EST] Sheet.getLastRow() [0.067 seconds]
[13-12-25 07:49:12:627 EST] Sheet.getRange([1, 1, 1, 5]) [0 seconds]
[13-12-25 07:49:12:629 EST] Range.setValues([[[N/A, , Select Option, , ]]]) [0.001 seconds]
[13-12-25 07:49:12:983 EST] Execution failed: TypeError: Cannot read property "thefile" from undefined. (line 20, file "Code") [0.17 seconds total runtime]
我们看到了同样的错误,但现在我们知道了行号。该行包含拼写错误:
var fileBlob = e.paramater.thefile
^^^^^^^^^
关于html - 使用 htmlService 和应用程序脚本上传的表单和文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769149/
我正在编写 Google Apps 脚本以使用 HtmlService 将电子表格中的数据显示到 HTML 表格中。但我面临以下两个挑战: 如果电子表格单元格值中有换行符,表格会将其显示为单行。 如果
我是编程新手,我正在尝试使用 Google-apps-script 通过 jQuery 连接几个按钮。我有一个电子表格和一个添加到它的菜单,从 HtmlService 打开一个对话框。 在对话框中我有
我有以下已发布的带有 code.gs 的网络应用程序 var queryString function doGet(e) { queryString = e.queryString //lo
使用 HtmlService(使用 Caja 清理)时,我可以获取/设置文本框(其他控件)的值吗? console.log('getting current value : ' + document.
我有一个 HtmlService 表单,可以从用户那里获取数据。 表单中有多个dropdownlist。 如果用户已经在第一个dropdownlist中选择了某个选项,是否可以从后续dropdownl
我的 google apps 脚本项目中有 2 个 html 文档(showHtml1、showHtml2)。我服务于第一个 function doGet() { return HtmlSer
我正在尝试将文件上传到特定的谷歌驱动器文件夹,同时将表单数据上传到电子表格中。此代码的电子表格部分有效,但文件上传功能无效。任何解决此问题的帮助将不胜感激。 代码.gs var submissionS
我真的很想对使用 Google Apps HtmlService 提供的一些简单表单使用 native html5 验证。 在 jsfiddle 中,表单按预期工作:输入不匹配六位数字会导致浏览器特
我想使用日期选择器来更轻松地在我正在开发的应用程序中选择日期,但是我不知道如何使用 Google Apps 脚本中的 HTML 服务使其正常运行。 如果你能给我提供一个这样的例子,我将非常感激,因为我
编辑:这个问题已经不同于被投票重复的问题,How to remove the arrow from a select element in Firefox .这个问题从一开始就在问题中被引用 - 在尝
我有一个按钮,我想将其替换为 Google 应用脚本通过方法 HtmlService.createTemplateFromFile('HTML_file') 加载的其他 HTML 对象。 按钮 onc
任何人都可以帮助我确定使用 GAS 的 HtmlService 托管和提供图像的最佳方式吗?我正在编写一个应用程序,需要一个带有两个小图像的基本 HTML UI,并且我试图尽可能封装所有内容。 当我在
在 scriptUi 中,我能够按照以下说明创建一个用于长时间等待的简单进度微调器:https://sites.google.com/site/scriptsexamples/learn-by-exa
我创建了一个 Google 表单并制作了一个 Google Apps 脚本小工具,用于将数据发布到表单的电子表格后端,然后返回一个自定义的 html5 确认页面。 我在我的脚本代码中使用了 HTMLS
我真的需要您的帮助,我们将非常欢迎您提供的任何帮助。 我有 2 个组合框 April November December 当我在第一个组合框中选择一个选项时,第二个组合
jQuery 位置使用 caja 不支持的“Fixed”,所以很简单 position: {my: "top", at: "top", of: $("#here")} 不适用于 htmlService
只是寻找一些有关如何实现 Apps 脚本 htmlservice 表单处理示例 jquery 的示例。 Google 文档对我来说还不够( https://developers.google.com/
我创建了两个 HTML 页面 page1.html 和 page2.html。如何在 page1 中单击按钮时将 ID 从 page1 传递到 page2? 代码.gs: function addAu
是否可以使用 localStroage在 HtmlService Google Apps 脚本? 我尝试了下面的代码,但它显示错误消息,因为 localStorage 未定义。 function do
我正在创建一个 Gmail 插件。以下引用页面说 - https://developers.google.com/gmail/add-ons/reference/ “Gmail 插件是使用 Apps
我是一名优秀的程序员,十分优秀!