Этот фрагмент кода скрипта Google Apps
for (let el = 0; el < tempDocBody.getNumChildren(); el++) {
const elem = tempDocBody.getChild(el);
Logger.log(
"ProcessMainTable [%s] %s %s",
el,
elem.getType().toString(),
elem.asText().getText(),
);
switch (elem.getType()) {
case DocumentApp.ElementType.TABLE:
target.getBody().insertTable(offset++, elem.asTable().copy());
break;
case DocumentApp.ElementType.PARAGRAPH:
target.getBody().insertParagraph(offset++, elem.asParagraph().copy());
break;
}
}
Работает нормально, ЗА ИСКЛЮЧЕНИЕМ того, что изображение, встроенное в одну из ячеек ТАБЛИЦЫ, не копируется в цель. Все остальное проходит хорошо, например. шрифты и форматирование. Разве .copy()
не должно быть "глубоким"?
Есть ли у кого-нибудь обходной путь?
1 ответ
Я верю вашей ситуации и цели следующим образом.
- В вашей ситуации ячейки таблицы имеют встроенное изображение. Когда вы копируете таблицу из исходного документа в целевой документ, изображения не копируются.
- Вы хотите скопировать таблицу в целевой документ, включив встроенные изображения.
Для этого как насчет этой модификации? В этом случае кажется, что встроенные изображения нельзя напрямую скопировать с помощью copy()
. Итак, как обходной путь после копирования таблицы из исходного документа в целевой документ, как насчет помещения изображений из исходного документа в целевой документ?
Когда ваш скрипт изменяется, он становится следующим.
Измененный скрипт:
target.getBody().insertTable(offset++, elem.asTable().copy());
var srcTable = elem.asTable().copy();
var dstTable = target.getBody().insertTable(offset++, srcTable);
for (var i = 0; i < srcTable.getNumRows(); i++) {
for (var j = 0; j < srcTable.getRow(i).getNumCells(); j++) {
var cell = srcTable.getCell(i, j);
for (var k = 0; k < cell.getNumChildren(); k++) {
var paragraph = cell.getChild(k).asParagraph();
for (var l = 0; l < paragraph.getNumChildren(); l++) {
var child = paragraph.getChild(l);
if (child.getType() == DocumentApp.ElementType.INLINE_IMAGE) {
var srcImg = child.asInlineImage();
dstTable.getCell(i, j).getChild(k).asParagraph().clear().insertInlineImage(l, srcImg.getBlob()).setWidth(srcImg.getWidth()).setHeight(srcImg.getHeight());
}
}
}
}
}
Заметка:
- Я искал об этой проблеме в системе отслеживания проблем Google. Но я не мог его найти. Так как насчет того, чтобы сообщить об этом в систему отслеживания проблем? Ссылка
Ссылки:
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.