下载功能添加转换xls到Google Sheets功能

问题描述 投票:0回答:1

我有通过链接下载 Google 文档中任何文件的工作代码。大多数文件都是.xlx或.xlsx格式,需要转换为Google表格类型。我尝试过使用在互联网上找到的一些方法,但它们对我不起作用。在下面的代码中,我用我测试的代码进行评论。我猜,谷歌已经改变了一些文档。

 function downloadFile(fileURL,folder) {
            
  var fileName = "";
  var fileSize = 0;
  var  fileId = "";
  
  var response = UrlFetchApp.fetch(fileURL, {muteHttpExceptions: true});
  var rc = response.getResponseCode();
  
  if (rc == 200) {
    var fileBlob = response.getBlob() //.getAs(MimeType.GOOGLE_SHEETS) - get error
    var folder = DriveApp.getFolderById(folder);
    if (folder != null) {
      var file = folder.createFile(fileBlob);//.getAs(MimeType.GOOGLE_SHEETS) - get error
      fileName = file.getName();
      fileSize = file.getSize();
      fileId = file.getId();
    }
  }
  //file.setMimeType("application/vnd.google-apps.spreadsheet") - not work
  //makeCopy('ssssss', folder, {convert: true}) - get error

  var fileInfo = [ rc, fileName, fileSize, fileId ];
  return fileInfo;
}

我这样调用函数:

downloadFile("http://www.beltools.ru/prais_rar/price%20TD%20RI.xls","0B_E2P3ZhQySBY3BBMzdlazBLcTA") 
google-apps-script google-sheets google-drive-api
1个回答
1
投票

为了将 Excel 转换为电子表格,DriveApp 无法做到这一点。所以必须使用Drive API。您可以使用高级 Google 服务中的 Drive API v2。通过启用高级 Google 服务和 Google API 控制台的 Drive API,可以在 Google Apps 脚本中使用“Drive API v2”。

使用方法如下。

  1. 在脚本编辑器中,选择资源 > 高级 Google 服务

  2. 在出现的对话框中,单击 Drive API v2 的开/关开关。

  3. 在对话框底部,单击 Google API 控制台的链接。

  4. 在控制台中,单击筛选框并输入 API“Drive API”名称的一部分,然后在看到名称后单击该名称。

  5. 在下一个屏幕上,单击启用 API。

  6. 关闭开发者控制台并返回到脚本编辑器。在对话框中单击“确定”。您启用的高级服务现在可以在自动完成中使用。

详细信息是https://developers.google.com/apps-script/guides/services/advanced

在示例脚本中,首先,通过

fileURL
下载一个文件,这是Excel文件,作为blob。 Blob 数据使用 Drive API 上传到 Google Drive。在这种情况下,不需要访问令牌。对于
downloadFile()
,输入数据和输出数据与您的
downloadFile()
相同。文件名从
fileURL
检索。

脚本:

function downloadFile(fileURL, folder) {
  var filename = fileURL.match(".+/(.+?)([\?#;].*)?$")[1];
  var response = UrlFetchApp.fetch(fileURL);
  var rc = response.getResponseCode();
  var blob = response.getBlob();
  var resource = {
    "mimeType": "application/vnd.google-apps.spreadsheet",
    "parents": [{id: folder}],
    "title": filename
  };
  var res = Drive.Files.insert(resource, blob);
  var fileInfo = [rc, res.title, blob.getBytes().length, res.id];
  return fileInfo;
}

结果:

[
    200,
    sample.xlsx,
    10000.0,
    ## file id ##
]

如果我误解了你的问题,我很抱歉。

© www.soinside.com 2019 - 2024. All rights reserved.