Преобразование GDoc в docx через GAS приводит к повреждению документа - PullRequest
0 голосов
/ 31 октября 2018

Я использую приведенный ниже фрагмент, чтобы преобразовать Google Doc в PDF и DOCX формат и сохранить его в GDrive. PDF в порядке, но у docx есть проблемы в Office Word 2013, и он вообще не открывается , показывая это сообщение . 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);  
}

Я также использовал строковый тип пантомимы, с тем же результатом. Чего мне не хватает?

1 Ответ

0 голосов
/ 31 октября 2018

Проблема:

  • getBlob() по умолчанию преобразует его в PDF. Итак, когда insert вводится в Drive как docx, вы пытаетесь конвертировать из pdf в docx.

Возможные решения:

  • Использовать прямое преобразование из gdoc с помощью Drive API Files: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);
}

Ссылки

...