- В папке с несколькими подпапками находятся файлы Excel (имя файла с расширениями .xlsx или .xls).
- Существуют файлы электронных таблиц (имя файла без расширений .xlsx или .xls).) в папке без вложенных папок.
- Вы хотите перезаписать существующие файлы электронных таблиц преобразованными электронными таблицами из файлов Excel.
- Количество файлов электронных таблиц и Excel совпадает.
Из вашего вопроса и комментариев я понял, как указано выше.
Сначала я тестировал обновление файлов по пакетному запросу.В результате, кажется, что обновление файла не может быть достигнуто пакетным запросом, когда файловый блоб используется для обновления.Об этом, если я найду обходной путь для этой ситуации, я бы хотел обновить свой ответ.
Так что в этом примере сценария я предлагаю метод использования Drive API Advanced Google Services для вышеуказанной ситуации.
При использовании этого сценария, пожалуйста, включите Drive API в Advanced Google Services и консоли API.Об этом вы можете узнать по здесь .
Поток:
Порядок выполнения этого сценария следующий:
- Получитьфайлы в исходной и целевой папках.
- Когда имена файлов в исходной папке существуют в целевой папке, эти файлы перезаписывают существующие файлы электронных таблиц.
- Когда имена файлов в исходной папкене существует в папке назначения, эти файлы преобразуются в электронную таблицу как новые файлы.
Пример сценария:
Перед запуском сценария установите sourceFolderId
и destinationFolderId
.
function myFunction() {
var sourceFolderId = "###"; // Folder ID including source files.
var destinationFolderId = "###"; // Folder ID that the converted files are put.
var getFileIds = function (folder, fileList, q) {
var files = folder.searchFiles(q);
while (files.hasNext()) {
var f = files.next();
fileList.push({id: f.getId(), fileName: f.getName().split(".")[0].trim()});
}
var folders = folder.getFolders();
while (folders.hasNext()) getFileIds(folders.next(), fileList, q);
return fileList;
};
var sourceFiles = getFileIds(DriveApp.getFolderById(sourceFolderId), [], "mimeType='" + MimeType.MICROSOFT_EXCEL + "' or mimeType='" + MimeType.MICROSOFT_EXCEL_LEGACY + "'");
var destinationFiles = getFileIds(DriveApp.getFolderById(destinationFolderId), [], "mimeType='" + MimeType.GOOGLE_SHEETS + "'");
var createFiles = sourceFiles.filter(function(e) {return destinationFiles.every(function(f) {return f.fileName !== e.fileName});});
var updateFiles = sourceFiles.reduce(function(ar, e) {
var dst = destinationFiles.filter(function(f) {return f.fileName === e.fileName});
if (dst.length > 0) {
e.to = dst[0].id;
ar.push(e);
}
return ar;
}, []);
if (createFiles.length > 0) createFiles.forEach(function(e) {Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS, parents: [{id: destinationFolderId}], title: e.fileName}, DriveApp.getFileById(e.id))});
if (updateFiles.length > 0) updateFiles.forEach(function(e) {Drive.Files.update({}, e.to, DriveApp.getFileById(e.id))});
}
Примечание:
- Если у вас много файлов для конвертации и время выполнения скрипта истекло, разделите файлы и запустите скрипт.
Ссылки: