2015-11-05 44 views
1

我正在为我们的团队设计一个共享的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

我的建议是从uploadFiles()修改返回值是一个对象,然后使用URL来填充电子表格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; 
} 
+0

谢谢 - 我有这周围的发挥,但不幸的是无法工作。但是,它让我以不同的方式思考问题 - 所以非常感谢! 我最终使用GAS Properties Service来处理传递的URL和名称数据。 – Connor

0

我最终使用GAS Properties Service解决了这个问题 - 创建了2个新的用户属性来包含URL和名称数据。

我还发现了一些与getActiveCell有关的问题 - 它一直在A1中放置链接。虽然我用了谷歌的建议方法,返回活动单元格,我能使用fix这里建议: 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; 
} 
相关问题