2015-11-05 45 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; 
} 
相關問題