Google 新脚本 Google 站点菜单:如何?
Google Script in New Google Site Menu: How to?
我正在尝试 "install" Google 脚本作为 Google 站点(新的 Google 站点——而不是 "Classic Google Site").
此脚本应该向站点中嵌入的电子表格添加新行。该电子表格(名为 "Catalog")是一个 Google Sheet 并且脚本(我想从 Google 站点 运行 )已经作为绑定脚本安装在 Sheet 中并在从 S 切换时工作
页。
该脚本实质上是在我的歌曲目录底部添加了一个新行,以创建一个新行来添加一首新歌曲。
在电子表格中运行的脚本是:
function addSong() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1]);
}
我的问题是我不知道如何从站点访问脚本。也就是说,我不知道如何在站点菜单中引用脚本(通过 URL 或什么?)以将其转到 运行.
我设想它的工作方式是我在站点的 "Catalog" 菜单下有一个名为 "Add Song" 的子页面,当我切换它时,我希望脚本 运行 并在目录 Sheet.
中添加一行
有什么帮助吗?
更新了更清晰的示例:
首先,从其他地方访问 GAS 脚本的最佳方式可能是将其发布为 Web 应用程序。这样就可以通过其发布的 URL 调用脚本。 Web App 的主要要求是它有一个 doGet() 函数作为入口点。
我很确定您只能将新的 Google 站点菜单项与同一站点中的另一个页面相关联。因此,您不能直接从菜单调用 WebApp(通过它的 URL)。但是在那个新的站点页面上,菜单项会将您带到,您可以:
- 将“站点”按钮与 Web 应用相关联 URL(如果有帮助),或
- 在页面中嵌入一些HTML带有JavaScript的代码,在页面加载时调用;有点复杂,但这确实意味着对 Web 应用程序的调用将是自动化的。
下面的代码是一个简单的网络应用程序,它是 sheet 中的绑定函数。如果您发布它(发布 >> 部署为 WebApp...)然后获取 url 您可以将其与按钮相关联或从页面调用。
function doGet(request){
addSong(request.parameter.song); // Call your own function.
var response = {status: "SUCCESS", data: request.parameter.song};
// Return the response.
return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
function addSong(song) {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1,song]);
}
要使用按钮,请将以下内容添加为带有按钮的 link:
https://script.google.com/macros/s/<your web app ref>/exec?song=%22Bohemian%20Rhapsody%22
下面的代码是从通过菜单访问的站点网页中嵌入的 HTML 自动调用 WebApp 的示例。从 JavaScript 调用 Web 应用程序还有其他方法,但 XMLHttpRequest() 适用于大多数浏览器。
<!DOCTYPE html>
<html>
<body onload="test('https://script.google.com/macros/s/<your web app ref>/exec?song=StairwaytoHeaven') ;">
<p id="message">? </p>
<script>
function test(url) {
var XHR = new XMLHttpRequest();
XHR.onreadystatechange = function() {
if(XHR.readyState == 4) {
if(XHR.status == 200) {
console.log("SUCCESS: status = "+XHR.status);
document.getElementById("message").innerHTML = XHR.responseText;
console.log(XHR.responseText);
} else {
console.log("FAILURE: status = "+XHR.readystate+" "+XHR.status);
document.getElementById("message").innerHTML = "Failure";
}
}
}
XHR.open("GET", url + ((/\?/).test(url) ? "&" : "?") + Date.now()); // Add timestamp to disable caching, if required.
XHR.send();
return;
}
</script>
</body>
</html>
我正在尝试 "install" Google 脚本作为 Google 站点(新的 Google 站点——而不是 "Classic Google Site").
此脚本应该向站点中嵌入的电子表格添加新行。该电子表格(名为 "Catalog")是一个 Google Sheet 并且脚本(我想从 Google 站点 运行 )已经作为绑定脚本安装在 Sheet 中并在从 S 切换时工作 页。
该脚本实质上是在我的歌曲目录底部添加了一个新行,以创建一个新行来添加一首新歌曲。
在电子表格中运行的脚本是:
function addSong() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1]);
}
我的问题是我不知道如何从站点访问脚本。也就是说,我不知道如何在站点菜单中引用脚本(通过 URL 或什么?)以将其转到 运行.
我设想它的工作方式是我在站点的 "Catalog" 菜单下有一个名为 "Add Song" 的子页面,当我切换它时,我希望脚本 运行 并在目录 Sheet.
中添加一行有什么帮助吗?
更新了更清晰的示例:
首先,从其他地方访问 GAS 脚本的最佳方式可能是将其发布为 Web 应用程序。这样就可以通过其发布的 URL 调用脚本。 Web App 的主要要求是它有一个 doGet() 函数作为入口点。
我很确定您只能将新的 Google 站点菜单项与同一站点中的另一个页面相关联。因此,您不能直接从菜单调用 WebApp(通过它的 URL)。但是在那个新的站点页面上,菜单项会将您带到,您可以:
- 将“站点”按钮与 Web 应用相关联 URL(如果有帮助),或
- 在页面中嵌入一些HTML带有JavaScript的代码,在页面加载时调用;有点复杂,但这确实意味着对 Web 应用程序的调用将是自动化的。
下面的代码是一个简单的网络应用程序,它是 sheet 中的绑定函数。如果您发布它(发布 >> 部署为 WebApp...)然后获取 url 您可以将其与按钮相关联或从页面调用。
function doGet(request){
addSong(request.parameter.song); // Call your own function.
var response = {status: "SUCCESS", data: request.parameter.song};
// Return the response.
return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
function addSong(song) {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1,song]);
}
要使用按钮,请将以下内容添加为带有按钮的 link:
https://script.google.com/macros/s/<your web app ref>/exec?song=%22Bohemian%20Rhapsody%22
下面的代码是从通过菜单访问的站点网页中嵌入的 HTML 自动调用 WebApp 的示例。从 JavaScript 调用 Web 应用程序还有其他方法,但 XMLHttpRequest() 适用于大多数浏览器。
<!DOCTYPE html>
<html>
<body onload="test('https://script.google.com/macros/s/<your web app ref>/exec?song=StairwaytoHeaven') ;">
<p id="message">? </p>
<script>
function test(url) {
var XHR = new XMLHttpRequest();
XHR.onreadystatechange = function() {
if(XHR.readyState == 4) {
if(XHR.status == 200) {
console.log("SUCCESS: status = "+XHR.status);
document.getElementById("message").innerHTML = XHR.responseText;
console.log(XHR.responseText);
} else {
console.log("FAILURE: status = "+XHR.readystate+" "+XHR.status);
document.getElementById("message").innerHTML = "Failure";
}
}
}
XHR.open("GET", url + ((/\?/).test(url) ? "&" : "?") + Date.now()); // Add timestamp to disable caching, if required.
XHR.send();
return;
}
</script>
</body>
</html>