我正在为我们的团队设计一个共享的Google表格,以跟踪我们制作的每个内容。我想实现一个功能,允许人们上传预览剪辑并在活动单元格中自动创建超链接。
到目前为止,我的脚本将HTML作为用户界面提供文件上传和名称输入。这部分工作正常,允许任何人直接上传到Google云端硬盘。
我一直无法让它自动在活动单元格中为上传的文件创建超链接。一直在寻找,但没有太大的运气。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('File Upload')
.addItem('Open', 'openDialog')
.addToUi();
}
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('form.html')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi()
.showModalDialog(html, 'Upload A File');
}
function uploadFiles(form) {
try {
var dropbox = "Clips";
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var blob = form.myFile;
var file = folder.createFile(blob);
file.setDescription("Uploaded by " + form.myName);
return "File uploaded successfully " + file.getUrl();
} catch (error) {
return error.toString();
}
}
答案 0 :(得分:0)
我的建议是将uploadFiles()
的返回值修改为对象,然后使用该网址填充电子表格HYPERLINK()
公式。
return "File uploaded successfully " + file.getUrl();
变为:
return {
result: "File uploaded successfully",
fileURL: file.getUrl(),
fileDesc: file.getDescription() // Could be other values
};
接下来,设置公式的函数。将使用要在uploadFiles()
中返回的公式中使用的值调用此服务器端函数。我假设这是来自你的客户端JavaScript,但这只是一个猜测,因为你没有在你的问题中包含它。
function setHyperlink( fileURL, fileDesc ) {
var formula = '=HYPERLINK("' + fileURL + '","' + fileDesc + '")';
SpreadsheetApp.getActiveCell()
.setFormula( formula );
return true;
}
答案 1 :(得分:0)
我最终使用GAS Properties Service解决了这个问题 - 创建了2个新的用户属性以包含URL和名称数据。
我还发现了getActiveCell的一些问题 - 它一直将链接放在A1中。虽然我已经使用谷歌建议的方法返回活动单元格,但我能够使用此处建议的修复: http://bit.ly/20Gc7l6
这是我的最终剧本
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('File Upload')
.addItem('Open', 'openDialog')
.addToUi();
}
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('form.html')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi()
.showModalDialog(html, 'Upload A File');
}
function uploadFiles(form) {
try {
var dropbox = "Blacksand Clips";
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
var blob = form.myFile;
var file = folder.createFile(blob);
file.setDescription(file.getDescription());
var userProperties = PropertiesService.getUserProperties();
var link = file.getUrl();
var name = file.getName();
userProperties.setProperty('link', link);
userProperties.setProperty('name', name);
setHyperlink();
return "File uploaded successfully ";
} catch (error) {
return error.toString();
}
}
function setHyperlink() {
var userProperties = PropertiesService.getUserProperties();
var link = userProperties.getProperty('link');
var displayName = userProperties.getProperty('name');
var value = 'hyperlink("' + link + '","' + displayName + '")'
var ss = SpreadsheetApp.getActiveSheet();
var cell = ss.getActiveCell().activate();
cell.setFormula( value )
return true;
}