我正在尝试将GDoc的内容复制到另一个GDoc中。这适用于所有不同的元素类型。包括一个表(Enum DocumentApp.ElementType.TABLE)。但是,如果表包含内嵌图像(Enum DocumentApp.ElementType.INLINE_IMAGE),则不会正确复制图像。
这是源GDoc示例的链接。 https://docs.google.com/document/d/14kXjC0CTkEgmD7Ttv0YKL9ubfDRHbL1hCVOqOiyiEDU/edit#。使用新西兰国旗查找表格中的行。该标志未正确复制到目标GDoc的新表中。
我只是在源文档中找到表对象(上图)并使用Body :: insertTable(childIndex,table)将其插入到目标GDoc的Body中。表中的大多数其他元素都可以复制。包括嵌入式Google绘图。但不是内嵌图像。
答案 0 :(得分:0)
可以在Class InlineImage中找到可用于复制内嵌图像的方法,如果内嵌图像包含在ListItem或Paragraph中,则甚至还有其他方法。
答案 1 :(得分:0)
我有类似的问题,在我的情况下,编号列表的GLYPH_TYPE也丢失了。 但我发现,如果逐个复制CellChildren,图像将被复制。
所以我通过整个复制新表然后从原始表中逐个替换每个dstTable单元格的内容来解决我的问题。
现在即使使用嵌套表也能正常工作,因为如果检测到表中的另一个表,函数会自行调用它。 并且通过在插入之后另外设置属性来解决丢失的ListItem属性的问题。
这是我运作良好的代码段:
首先我检测到表并将其插入dstBody ...
...
dstChild = srcChild.copy();
switch( dstChild.getType() ) {
case DocumentApp.ElementType.PARAGRAPH:
...
case DocumentApp.ElementType.LIST_ITEM:
...
case DocumentApp.ElementType.TABLE:
var newTable =
dstBody.insertTable( dstBody.getNumChildren()-1, dstChild );
copyTableCellByCell( dstChild, newTable );
break;
....
}
这是可能的递归函数,它通过首先清除它并复制原始表中的内容来替换每个单元格:
function copyTableCellByCell( srcTable, dstTable ) {
var numRows = dstTable.getNumRows();
var dstRow, numCells, dstCell, actCellIndex;
for ( var actRowIndex = 0; actRowIndex < numRows; actRowIndex++ ) {
dstRow = dstTable.getRow( actRowIndex );
numCells = dstRow.getNumCells();
for ( actCellIndex = 0; actCellIndex < numCells; actCellIndex++ ) {
dstCell = dstRow.getCell( actCellIndex );
dstCell.clear();
var srcCell = srcTable.getCell( actRowIndex, actCellIndex );
var numCellChildren = srcCell.getNumChildren();
for ( var y = 0; y < numCellChildren; y++ ) {
var cellChild = srcCell.getChild( y );
var childCopy = cellChild.copy();
switch( childCopy.getType() ) {
case DocumentApp.ElementType.PARAGRAPH:
dstCell.insertParagraph( y, childCopy );
break;
case DocumentApp.ElementType.LIST_ITEM:
// that the GLYPH_TYPE doesn't get lost
var atts = childCopy.getAttributes();
var
newListItem = dstCell.insertListItem( y, childCopy );
newListItem.setAttributes( atts );
break;
case DocumentApp.ElementType.TABLE:
var newTable =
dstCell.insertTable( y, childCopy );
copyTableCellByCell( cellChild, newTable );
break;
}
}
// remove the very first empty paragraph in the cell
while ( (y = dstCell.getNumChildren()) > numCellChildren ) {
dstCell.getChild( y - 1 ).removeFromParent();
}
}
}
}
当然,这可以很好地调整。 如果您希望服务器必须减少工作量,您可以搜索并选择内嵌图像。
我希望,这有助于任何方式。 非常感谢你的关注,
理查德
答案 2 :(得分:0)
我找到了这个bug的无编码解决方案。
将图像插入&#34;绘图&#34;在源文档中。
结果将是表格中的图像,它与TABLE类型一起被完美复制。