У меня есть документы Google того же формата в папке Google Диска, которые я хочу объединить/объединить в один файл Google Doc, образец объединяемых документов Google выглядит так: это. Вот пример кода, который я пытаюсь использовать для этой цели:
function mergeGoogleDocs() {
var folderId = "####"; //Where all Google docs currently are
var folder = DriveApp.getFolderById(folderId);
var docIDs = [];
var combinedDoc = DocumentApp.create("Merged Document");
var files = folder.getFiles();
//Get all file Ids present in a folder
while (files.hasNext()) {
var file = files.next();
docIDs.push(file.getId());
}
var baseDoc = DocumentApp.openById(combinedDoc.getId());
var body = baseDoc.getActiveSection();
for (var i = 1; i < docIDs.length; ++i) {
var otherBody = DocumentApp.openById(docIDs[i]).getActiveSection();
var totalElements = otherBody.getNumChildren();
for (var j = 0; j < totalElements; ++j) {
var element = otherBody.getChild(j).copy();
var type = element.getType();
if (type == DocumentApp.ElementType.PARAGRAPH) body.appendParagraph(element);
else if (type == DocumentApp.ElementType.TABLE) body.appendTable(element);
else if (type == DocumentApp.ElementType.LIST_ITEM) body.appendListItem(element);
else if (type == DocumentApp.ElementType.INLINE_IMAGE) {
var image = element.asInlineImage();
var blob = image.getBlob();
var imageFile = folder.createFile(blob);
combinedDoc.getBody().appendImage(imageFile.getBlob());
}
else throw new Error('Unknown element type: ' + type);
}
}
}
Однако, когда я пытаюсь запустить его, он показывает следующую ошибку:
Исключение: Услуга недоступна: Документы
Я также добавил Документы в разделе «Услуги» слева в редакторе скриптов. Но проблема не решена. Подскажите, пожалуйста, в чем проблема со скриптом и почему он не может объединить все документы в один? Любая помощь приветствуется.
@Cooper, спасибо за ваш ответ, я изменил его на baseDoc.getBody(), но он показывает ту же ошибку, я сослался на этот источник скрипта: labnol.org/code/19892-merge-multiple-google -документы





getFilesByType(MimeType.GOOGLE_DOCS).Document.getActiveSection() было изменено на Document.getBody(). Ссылка На текущем этапе кажется, что getBody() и getActiveSection() возвращают один и тот же объект DocumentBodySection. Но я хотел бы порекомендовать использовать getBody сейчас.Когда эти моменты отражаются в вашем сценарии показа, получается следующее.
function mergeGoogleDocs() {
var folderId = "###"; //Where all Google docs currently are
var folder = DriveApp.getFolderById(folderId);
var docIDs = [];
var files = folder.getFilesByType(MimeType.GOOGLE_DOCS);
//Get all file Ids present in a folder
while (files.hasNext()) {
var file = files.next();
docIDs.push(file.getId());
}
if (docIDs.length == 0) return;
var baseDoc = DocumentApp.create("Merged Document");
var baseDocId = baseDoc.getId();
var body = baseDoc.getBody();
for (var i = 0; i < docIDs.length; ++i) {
var otherBody = DocumentApp.openById(docIDs[i]).getBody();
var totalElements = otherBody.getNumChildren();
for (var j = 0; j < totalElements; ++j) {
var element = otherBody.getChild(j).copy();
var type = element.getType();
if (type == DocumentApp.ElementType.PARAGRAPH) {
var cp = element.asParagraph();
var positionedImages = cp.getPositionedImages();
if (positionedImages.length > 0) {
var img = positionedImages[0];
var { id, blob, width, height, layout, leftOffset, topOffset } = { id: img.getId(), blob: img.getBlob(), width: img.getWidth(), height: img.getHeight(), layout: img.getLayout(), leftOffset: img.getLeftOffset(), topOffset: img.getTopOffset() };
cp.removePositionedImage(id);
var p = body.appendParagraph(cp);
p.addPositionedImage(blob)
.setWidth(width)
.setHeight(height)
.setLayout(layout)
.setLeftOffset(leftOffset)
.setTopOffset(topOffset);
} else {
body.appendParagraph(element);
}
} else if (type == DocumentApp.ElementType.TABLE) {
body.appendTable(element);
} else if (type == DocumentApp.ElementType.LIST_ITEM) {
body.appendListItem(element);
} else if (type == DocumentApp.ElementType.INLINE_IMAGE) {
var image = element.asInlineImage();
var blob = image.getBlob();
var imageFile = folder.createFile(blob);
combinedDoc.getBody().appendImage(imageFile.getBlob());
} else {
throw new Error('Unknown element type: ' + type);
}
}
// Below script is used for removing the duplicated image. But, this might not be required to be used.
baseDoc.saveAndClose();
baseDoc = DocumentApp.openById(baseDocId);
body = baseDoc.getBody();
var lastP = body.getParagraphs().pop();
var lastPImage = lastP.getPositionedImages();
if (lastPImage.length != 0) {
lastP.removePositionedImage(lastPImage[0].getId());
}
body.appendPageBreak();
}
}
getActiveSection() не является методом класса Document