Api 谷歌应用程序脚本的另一个doGet()问题-“;“未知宏数据”;错误

Api 谷歌应用程序脚本的另一个doGet()问题-“;“未知宏数据”;错误,api,google-apps-script,Api,Google Apps Script,我显然是谷歌应用程序脚本的新手,不过我在C、PHP和Java编程方面有一些经验。由于我们希望在公司中使用谷歌应用程序脚本创建一个小型CRM,因此我们需要使用谷歌网站上提供的表单创建一个应用程序。我一直在寻找这个问题的答案很长时间了,不幸的是,我没有找到任何答案。我有这样一个代码: var klienci_id = new Array(100); var klienci_nazwa = new Array(100); var klienci_adres = new Array(100); var

我显然是谷歌应用程序脚本的新手,不过我在C、PHP和Java编程方面有一些经验。由于我们希望在公司中使用谷歌应用程序脚本创建一个小型CRM,因此我们需要使用谷歌网站上提供的表单创建一个应用程序。我一直在寻找这个问题的答案很长时间了,不幸的是,我没有找到任何答案。我有这样一个代码:

var klienci_id = new Array(100);
var klienci_nazwa = new Array(100);
var klienci_adres = new Array(100);
var klienci_osoba = new Array(100);
var klienci_telefon = new Array(100);
var klienci_email = new Array(100);

function doGet(e) {
  var app = UiApp.createApplication();

   // hello world label
  var helloworldLabel = app.createLabel("I love Apps  Script!").setStyleAttribute("fontSize","16px");

  // add the label to the app container
  app.add(helloworldLabel);

  return app;
}


function main() {

 var klienci = SpreadsheetApp.openById("0ArsOaWajjzv9dEdGTUZCWFc1NnFva05uWkxETVF6Q0E");

 var kuchnia_polska = klienci.getSheetByName("Kuchnia polska");

 var dane = kuchnia_polska.getRange("D7:F22");

doGet();

}
每次我试图发布它并输入给定的链接时,我都会得到一个错误“Unknown macro doGet”。我知道当有人不使用doGet()函数时,这是一个常见的问题,但我使用了,但它仍然不起作用。我还认为谷歌应该在谷歌应用程序脚本上创建一个Thoround文档,这将像Unix手册那样工作,因为我根本无法阅读所有这些奇怪的该死的帮助页面:)它既不是Windows帮助,也不是一本好的手册;)

问候,,
Kamil

我在这里复制了你的代码

当部署为web应用程序时,似乎可以正常工作

我能想到的唯一一件事是,代码中还有一些东西没有复制到引发异常的代码段中


[就在GUI Builder发布之前,我提出了一个可能对您的项目有所帮助的方法]

我很惊讶,您对“doGet()”函数的使用存在一些误解。当你想将一个应用程序作为一个webapp运行时,它确实说它必须包含一个doGet函数,但它没有明确说明这个函数应该是整个应用程序的起点,即url首先调用的函数。因此,从所谓的“main”函数调用doGet函数没有多大意义,因为“main”函数不是主函数

我现在无法想象某个函数调用doGet函数的情况,因为脚本中的每个函数最初(直接或间接)都是从这个doGet函数调用的。。。。事实上,脚本中任何其他函数的“结束”都会“返回”到doGet初始函数。这可能不是绝对正确的,但它能让你大致了解它是如何工作的


我希望这足够清楚,回到您的代码片段,如果您删除doGet(e)调用,它将显示一个漂亮的“我爱应用程序脚本!”,但它不会做任何其他事情,当然不会看到“main”函数。

谢谢你们的帮助Serge,是的,谷歌应用程序脚本的结构应该是什么并不明显。它们是基于JavaScript的,但是,由于代码中缺少HTML,它们的流程完全不同——因此很自然,必须先执行一个主函数。当然,在每个编程环境中,它都必须有不同的名称,以使其更易于区分;-)

我创建了我的应用程序的一个新副本,没有完全更改代码-部署了它,它工作得很漂亮。因为我没有更改access选项中的任何内容,所以很奇怪,两个具有相同代码和相同选项的应用程序不会给出相同的结果。我认为这可能是一种环境缺陷,也许谷歌的人应该看看这个:)

这是脚本的链接,我已经将访问权限设置为“有链接的任何人”


我怀疑您曾经制作了一个“版本”,发布了应用程序,转到了“真实”链接而不是“开发”链接,然后添加了doGet()函数。当你制作一个版本时,它会在那个时候冻结代码。应用程序发布的版本是将在“真实”链接上运行的代码版本(您提供给用户的内容),该链接允许您在不干扰应用程序现有用户的情况下继续编辑代码。“发布”对话框中提供了一个特殊的“开发”链接,该链接始终指向代码的最新版本,但它只对您有效,对其他人无效。

是的,您是对的:)我刚刚回来写同样的内容,因为我刚才发现了它,我看到您发现了问题。谢谢你的回答,也很抱歉花了你的时间来处理这样一个愚蠢的问题。是的,在“发布”对话框的“测试web应用程序以获取最新代码”下有一个链接。我想这是某种帮助或什么的:P@Corey:当您说“始终指代码的最新版本”时,您是指最后一次“保存”还是las“版本”?我认为这只是“保存”,但希望您确认;-)-还有,你同意我下面的回答吗,还是我错了?(我也想听听你的意见:-)。感谢这里有一个例子,你想调用doGet(),而这正是最初的提问者在示例中所做的——能够在电子表格中显示相同的应用程序,并将其作为一个独立的应用程序。我从来没有想过要这样做,但为了让它工作,“主功能”不应该这样结束吗<代码>doGet();var app=UiApp.getActiveApplication()SpreadsheetApp.getActive().show(app)}是的,您需要show(doGet())或类似的东西。我在测试时使用了这个模式。这个链接给了我一个很好的“未知宏doGet”…-)是的,我也有同样的问题-_-