我有一张包含脚本的Google表格。该脚本创建了一些应该是:
的文本我目前的解决方案是,使用文本创建一个新的gdoc文件(并在每次运行脚本时将其打开并将文本复制到剪贴板)相当慢,并创建了大量需要稍后删除的文档。
我尝试在gsheet脚本中编写return ContentService.createPlainTextOutput(txt);
,但这会导致错误" TypeError:在对象ContentService"中找不到函数createPlainTextOutput。
答案 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...');
}
从菜单,按钮调用此功能,甚至调整它以适应侧栏...
只是在评论中看到你的文字可能(非常)长,我认为最好添加一个滚动面板...代码如下:
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或其他容器中显示该页面。
其他选项,包括您目前正在做的事情,是:
最佳选择取决于您需要输出的文本数量,以及格式化等特殊要求。
希望这有帮助!
答案 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"))
}