通过GAS将GDoc转换为docx会生成损坏的文档

时间:2018-10-31 15:13:13

标签: google-apps-script google-docs

我使用下面的代码片段将Google文档转换为PDF和docx格式并将其保存到GDrive。 PDF很好,但是docx在Office Word 2013中有问题,并且根本无法打开showing this message。 LibreOffice 6可以打开文件,但是只能在LibreDraw中以只读方式打开文件,不能以LibreWriter格式打开,并且文本在文本框中显示,边框为纯图像,而不是对象。

如果我在
文件>下载为..> Microsoft Word(.docx)的菜单中手动进行转换,则该文件运行良好。我有成百上千个文件,手动解决不是解决方案。

function saveToDrive(_name){
  //Get document blob for converting
  var blob = DocumentApp.openById('string_id').getBlob();
  //Save as PDF
  var pdf = {
    title: _name + '.pdf',
    mimeType: MimeType.PDF,
    parents:[{id:'google_drive_folder'}]
  };
  Drive.Files.insert(pdf, blob);
  //Save as docx
  var docx = {
    title: _name + '.docx',
    mimeType: MimeType.MICROSOFT_WORD,
    parents:[{id:'google_drive_folder'}]
  };
  Drive.Files.insert(docx, blob);  
}

我也使用了字符串mime类型,结果相同。我想念什么?

1 个答案:

答案 0 :(得分:0)

问题:

  • getBlob()默认将其转换为PDF。因此,当insertdocx的身份放入云端硬盘时,您正试图从pdf转换为docx

可能的解决方案:

  • 使用Drive API gdocFiles:export直接进行转换
  • 使用UrlFetchApp
  • 直接获取导出链接

示例脚本:

function docToDocx(id) {
  var format = 'docx',
    exportLink =
      'https://docs.google.com/document/d/' + id + '/export?format=' + format,
    blob = UrlFetchApp.fetch(exportLink, {
      headers: {
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
      },
    });
  DriveApp.createFile(blob);
}

参考文献: