Я хочу создать файл Google Docs при условии, что количество страниц должно быть четным. Я использовал следующий код:
function myFunction(){
var data = doc.getAs("application/pdf").getDataAsString();
var pages = data.match(//Contents/g).length;
Logger.log(pages);
if (pages % 2 !== 0)
{
var searchText = '----- End -----';
var res = Docs.Documents.get(docId);
let offset = 0;
const requests = res.body.content.reduce((ar, e) => {
if (e.paragraph) {
e.paragraph.elements.forEach(f => {
if (f.textRun) {
const re = new RegExp(searchText, "g");
let p = null;
while (p = re.exec(f.textRun.content)) {
ar.push({insertPageBreak: {location: {index: p.index + offset}}});
}
}
})
}
offset = e.endIndex;
return ar;
}, []).reverse();
Docs.Documents.batchUpdate({requests: requests}, docId);
}
При запуске получаю ошибку: Preventing GoogleJsonResponseException: API call to sheets.spreadsheets.batchUpdate failed with error: Must specify at least one request
.
После некоторых исследований я исправил строку
Docs.Documents.batchUpdate({requests: requests}, docId);
к
if (requests.length > 0) {
Docs.Documents.batchUpdate({requests: requests}, docId);}
}
Теперь код работает нормально, но в сгенерированном файле Google Docs по-прежнему нет разрывов страниц. Мне нужна помощь. Спасибо.
Из вашего сценария показа я подумал, что вы можете ответить на этот вопрос https://stackoverflow.com/a/65745933. Если я правильно понимаю, я думал, что причина вашей текущей проблемы Preventing GoogleJsonResponseException: API call to sheets.spreadsheets.batchUpdate failed with error: Must specify at least one request.
связана с тем, что в вашем документе Google нет значения var searchText = '----- End -----'
. Например, когда вы помещаете значение ----- End -----
на последнюю страницу вашего документа Google, можно использовать этот сценарий. Но, судя по вашему сообщению об ошибке, я обеспокоен тем, что это значение может быть не включено в ваш документ Google.
Итак, в вашей ситуации я подумал, что вы, возможно, захотите вставить разрыв страницы на последнюю страницу. В таком случае, как насчет следующих модификаций? При следующих изменениях разрыв страницы вставляется в конец документа.
В этом шаблоне используется Docs API.
var searchText = '----- End -----';
var res = Docs.Documents.get(docId);
let offset = 0;
const requests = res.body.content.reduce((ar, e) => {
if (e.paragraph) {
e.paragraph.elements.forEach(f => {
if (f.textRun) {
const re = new RegExp(searchText, "g");
let p = null;
while (p = re.exec(f.textRun.content)) {
ar.push({insertPageBreak: {location: {index: p.index + offset}}});
}
}
})
}
offset = e.endIndex;
return ar;
}, []).reverse();
Docs.Documents.batchUpdate({requests: requests}, docId);
var res = Docs.Documents.get(docId);
var requests = [{ insertPageBreak: { location: { index: res.body.content.pop().endIndex - 1 } } }];
Docs.Documents.batchUpdate({ requests }, docId);
В этом шаблоне API Документов не используется.
var searchText = '----- End -----';
var res = Docs.Documents.get(docId);
let offset = 0;
const requests = res.body.content.reduce((ar, e) => {
if (e.paragraph) {
e.paragraph.elements.forEach(f => {
if (f.textRun) {
const re = new RegExp(searchText, "g");
let p = null;
while (p = re.exec(f.textRun.content)) {
ar.push({insertPageBreak: {location: {index: p.index + offset}}});
}
}
})
}
offset = e.endIndex;
return ar;
}, []).reverse();
Docs.Documents.batchUpdate({requests: requests}, docId);
var body = doc.getBody();
doc.getBody().insertPageBreak(body.getChildIndex(body.appendParagraph("")));
doc
. Итак, я угадал doc
как объект Class Document. Пожалуйста, будьте осторожны с этим.@Lê Phong Nguyễn Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.
Это аккуратно и профессионально. Большое спасибо, это прекрасный подарок, который вы мне сделали.