从上传的文件在活动单元格中创建超链接

时间:2015-11-05 11:23:28

标签: hyperlink google-apps-script google-sheets

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

}  

2 个答案:

答案 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;
}