为什么在 Google 文档中复制 table 不会复制嵌入的图形?
Why does copying a table in Google Docs not copy embedded graphics?
这段 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;
}
}
工作正常,除了 TABLE 单元格之一中嵌入的图像没有被复制到目标。其他一切都很好,例如字体和格式。 .copy()
不应该是 "deep" 吗?
有人对此有解决方法吗?
我相信你的情况和目标如下。
- 在您的情况下,table 单元格具有内联图像。当您将 table 从源文档复制到目标文档时,图像不会被复制。
- 您想通过包含内联图像将 table 复制到目标文档。
为此,这个修改怎么样?在这种情况下,似乎无法使用 copy()
直接复制内联图像。因此,作为解决方法,将 table 从源文档复制到目标文档后,将源文档中的图像放入目标文档如何?
当你的脚本修改后,变成如下。
修改后的脚本:
从:
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 问题跟踪器上搜索过这个问题。但我找不到它。那么如何将此报告给问题跟踪器呢? Ref
参考文献:
这段 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;
}
}
工作正常,除了 TABLE 单元格之一中嵌入的图像没有被复制到目标。其他一切都很好,例如字体和格式。 .copy()
不应该是 "deep" 吗?
有人对此有解决方法吗?
我相信你的情况和目标如下。
- 在您的情况下,table 单元格具有内联图像。当您将 table 从源文档复制到目标文档时,图像不会被复制。
- 您想通过包含内联图像将 table 复制到目标文档。
为此,这个修改怎么样?在这种情况下,似乎无法使用 copy()
直接复制内联图像。因此,作为解决方法,将 table 从源文档复制到目标文档后,将源文档中的图像放入目标文档如何?
当你的脚本修改后,变成如下。
修改后的脚本:
从: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 问题跟踪器上搜索过这个问题。但我找不到它。那么如何将此报告给问题跟踪器呢? Ref