Ошибка скрипта Google Apps «Неверный запрос» при передаче .xlsm-файла в таблицу GS - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть Excel-файл (.xlsm) в качестве Gmail-вложения в моем почтовом ящике, и я хочу передать его в GDrive. Там это должно быть сохранено как GSheet. Я пытаюсь автоматизировать этот процесс с помощью Apps Script.

К сожалению, я получаю ошибку при запуске скрипта. (вызов API для drive.files.insert завершился с ошибкой: неправильный запрос) Это очень странно, потому что несколько раз скрипт работал и файл мог быть конвертирован без проблем. На прошлой неделе это сработало, как только я отправил письмо с приложением кому-то (не спрашивайте меня, где контекст). Но теперь это все история, и я не знаю, как исправить ошибку.

Я новичок в StackOverflow и с нетерпением жду каждого вашего ответа. Большое спасибо.

Вот код:

function importFunction() {

  var threads =  GmailApp.search('CC520_Report_Lukas_GAS_ABC');                             
  var messages = threads[0].getMessages();    
  var message = messages[0];                                                                
  var attachment = message.getAttachments()[0];                                            

  var resource = {
    title: 'NewFileLukas',                                
    mimeType: MimeType.GOOGLE_SHEETS,
    parents: [{id: 'xxxxx6BD1SIfI0Cz5bmGahzSlHUxxxxxx'}], 
};

var insert = Drive.Files.insert(resource, attachment);      // Here comes the error. 

1 Ответ

1 голос
/ 29 апреля 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите преобразовать файл .xlsm в таблицу Google.
  • attachment, который вы используете, является файлом .xlsm .
  • В вашей ситуации ошибка API call to drive.files.insert failed with error: Bad Request возникает в Drive.Files.insert(resource, attachment).
    • Вы хотите удалить эту ошибку.

Для этого, как насчет этого ответа? Я также столкнулся с той же проблемой.

Точки модификации:

  • MimeType файла .xlsm - application/vnd.ms-excel.sheet.macroenabled.12. В вашем скрипте, когда используется console.log(attachment.getContentType()), если attachment является файлом .xlsm, возвращается такой mimeType.
  • Когда importFormats подтверждается методом «О программе: get» в Drive API Ref , похоже, что application/vnd.ms-excel.sheet.macroenabled.12 можно преобразовать в application/vnd.google-apps.spreadsheet. Это можно увидеть в Drive API v2 и v3.
    • Но, когда application/vnd.ms-excel.sheet.macroenabled.12 данные используются для Drive.Files.insert(resource, attachment), возникает ошибка. В этом случае я подтвердил, что даже когда я проверял это с помощью Drive API v3, возникала та же проблема.
    • Я думал, что это преобразование, возможно, еще не было отражено. Также я считаю, что это будет изменено в будущем обновлении.

Поэтому в качестве текущего обходного пути я хотел бы предложить преобразовать файл .xlsm в таблицу Google изменение mimeType для BLOB-объекта.

Измененный сценарий:

При изменении сценария измените его следующим образом.

С:
var attachment = message.getAttachments()[0];
До:
var attachment = message.getAttachments()[0].setContentType(MimeType.MICROSOFT_EXCEL);

или

var attachment = message.getAttachments()[0];
if (attachment.getContentType() == "application/vnd.ms-excel.sheet.macroenabled.12") {
  attachment.setContentType(MimeType.MICROSOFT_EXCEL);
}

Примечание:

  • В моей среде я могу подтвердить, что, изменив mimeType на MimeType.MICROSOFT_EXCEL, файл .xlsm можно преобразовать в электронную таблицу Google.
  • В этом случае макрос файла .xlsm не преобразуется в скрипт Google Apps. Кроме того, после преобразования файла .xlsm в электронную таблицу Google, когда электронную таблицу Google преобразовывают в файл Excel, макрос не включается. Я думаю, что это спецификация. Поэтому будьте осторожны с этим.

Ссылка:

...