Google Script:从gsheet脚本返回文本

时间:2014-09-25 12:12:18

标签: google-apps-script

我有一张包含脚本的Google表格。该脚本创建了一些应该是:

的文本
  • 复制到剪贴板或
  • 在网络浏览器中显示(然后我将其复制到剪贴板 手动)或
  • 保存到硬盘上的特定文件中(然后我打开文件 并将文本复制到剪贴板)

我目前的解决方案是,使用文本创建一个新的gdoc文件(并在每次运行脚本时将其打开并将文本复制到剪贴板)相当慢,并创建了大量需要稍后删除的文档。

我尝试在gsheet脚本中编写return ContentService.createPlainTextOutput(txt);,但这会导致错误" TypeError:在对象ContentService"中找不到函数createPlainTextOutput。

3 个答案:

答案 0 :(得分:4)

还有另一种解决方案,我(个人)发现更容易使用:

创建一个弹出窗口,其中包含您可以复制并粘贴到任何地方的文本。 您可以使用html格式化输出或纯文本,具体取决于您需要/喜欢的内容。

电子表格中的简单代码如下:

function myFunction() {
  var ui = SpreadsheetApp.getUi();
  var app = UiApp.createApplication().setWidth(400).setHeight(600);
  var html = app.createHTML();
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getActiveRange().getValues();
  var string = '<b>Copy and paste the text below<br><br></b>';
  for(var n in data){
    string += data[n].join(' - ')+'<br>';
  }
  html.setHTML(string);
  app.add(html);
  ui.showModelessDialog(app,'toClipboard...');
}

从菜单,按钮调用此功能,甚至调整它以适应侧栏...

enter image description here


编辑:

只是在评论中看到你的文字可能(非常)长,我认为最好添加一个滚动面板...代码如下:

function myFunction() {
  var ui = SpreadsheetApp.getUi();
  var app = UiApp.createApplication().setWidth(400).setHeight(600);
  var html = app.createHTML();
  var scroll = app.createScrollPanel(html).setPixelSize(400,600);
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getActiveRange().getValues();
  var string = '<b>Copy and paste the text below<br><br></b>';
  for(var n in data){
    string += data[n].join(' - ')+'<br>';
  }
  html.setHTML(string);
  app.add(scroll);
  ui.showModelessDialog(app,'toClipboard...');
}

答案 1 :(得分:1)

由于Google Apps脚本在服务器(Google服务器)上执行,因此无法访问剪贴板或文件系统。所以那些不是您正在寻找的选项。

如果您的脚本作为独立的Web应用程序运行,并且未附加到电子表格或文档等容器,则可以在浏览器中显示文本输出(将其输出到网页)。在这种情况下,您的服务器端函数应该将文本返回到页面,然后您可以使用javascript在div或其他容器中显示该页面。

其他选项,包括您目前正在做的事情,是:

  • 将文字写入Google文档或电子表格。替代什么 您目前正在进行操作 - 每次运行时都会创建Google文档 你的脚本 - 可能是将文本附加到文本末尾 每次记录,可能包括开头的时间戳 每个新添加(以便于搜索/引用)。 但是,随着此文档的大小增加,此操作可能会运行 越来越慢。文档的某种旋转可能在 在那种情况下。如果文本量不是太大,请附加 它对指定电子表格中的工作表也可能是一个选项(用 下一列中的时间戳以供参考)。无论哪种方式,这都会 让你记录脚本中的所有文本输出 一个地方。
  • 将文字作为电子邮件发送。使用GmailApp.sendEmail()方法很简单 获取文本输出的方法。如果您使用Google,速度非常快 与脚本运行在同一域下的应用程序电子邮件帐户。 在Gmail中设置过滤器,以便为此类电子邮件应用标签。我这样做了 我的应用程序很多。
  • 使用Logger记录文本输出。 Logger.log()是一种快速的方法 在屏幕上显示文本输出。查看菜单View-&gt; Log下的日志。 请记住,Logger确实对文本数量有限制 显示 - 不确切知道限制是什么,但我肯定 之前遇到截断的输出(尽管我有很多数据 日志记录)。每次执行脚本时都会轮换日志,因此如果 您需要保留输出文本,您必须复制/粘贴它 从日志到其他地方。

最佳选择取决于您需要输出的文本数量,以及格式化等特殊要求。

希望这有帮助!

答案 2 :(得分:1)

我喜欢Serge's idea在电子表格的UI中显示字符串,但是不幸的是,特定的解决方案使用的是过时的API(UiApp has been deprecated. Please use HtmlService instead.)。这是我想出的改编版本:

function myFunction() {
  function displayTextInSidebar(text) {
    var htmlOutput = HtmlService.createHtmlOutput("<b>Copy and paste the text below<br><br></b>" +
                                                  "<pre>").appendUntrusted(text).append("</pre>")
      .setTitle('Output from Apps Script')
      .setWidth(300);
    SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .showSidebar(htmlOutput);
  }
  //displayTextInSidebar("<b>foobar</b>")
  displayTextInSidebar(SpreadsheetApp.getActiveSheet().getActiveRange().getValues().map(function(row) { return row.join(" - "); }).join("\n"))
}