更新/替换Google文档中的嵌入式图像

邮件

我正在尝试设置一种功能来更新Google文档上的图像,就像Lucidchart附件在其“已更新的插入图”功能上所做的一样。为此,我目前正在执行以下操作:

  • 创建一个命名范围并将其ID与数据一起存储在文档属性中以生成图像,以供以后检索。
  • 更新时,调用body.getNamedRangeById()并将元素替换为新生成的图像。

这可行,但是我有以下Lucidchart不会发生的问题:

  • 每次更新时,图像后都会添加一个空白行。
  • 如果用户将图像拖放到文档中以重新定位,则“命名范围”将消失,以后我将无法检索到它。
  • 如果用户将图像居中,则更新后,图像将返回到左侧位置,甚至复制其属性

是否有人知道像在Lucidchart附加更新功能中一样的方法来替换/更新Google文档上引用的图像的好策略?

谢谢

亨里克·阿布雷乌

范围移动时,NamedRanges确实会丢失,因此它们对您的情况不是很好。但是没有其他方法可以识别元素(这是Google文档的一个很大的缺点)。

对于图片,您可以使用其LINK_URL进行识别,这似乎是Lucidchart所使用的。它不会妨碍用户,因此这可能是一个很好的解决方案。

关于插入图像时出现空白行并丢失属性,我想(由于尚未共享任何代码)您是将图像直接插入文档主体而不是段落中。然后,将自动创建一个段落来包装您的图像,从而导致空白行和属性丢失。

这是一些代码示例:

function initialInsert() {
  var data = Charts.newDataTable().addColumn(
    Charts.ColumnType.STRING, 'Fruits').addColumn(
    Charts.ColumnType.NUMBER, 'Amount').addRow(
    ['Apple',15]).addRow(
    ['Orange',6]).addRow(
    ['Banana',14]).build();
  var chart = Charts.newPieChart().setDataTable(data).build();

  var body = DocumentApp.getActiveDocument().getBody()
  body.appendImage(chart).setLinkUrl('http://mychart');
  //here we're inserting directly in the body, a wrapping paragraph element will be created for us
}

function updateImage() {
  var data = Charts.newDataTable().addColumn(
    Charts.ColumnType.STRING, 'Fruits').addColumn(
    Charts.ColumnType.NUMBER, 'Amount').addRow(
    ['Apple',Math.floor(Math.random()*31)]).addRow( //random int between 0 and 30
    ['Orange',Math.floor(Math.random()*31)]).addRow(
    ['Banana',Math.floor(Math.random()*31)]).build();
  var chart = Charts.newPieChart().setDataTable(data).build();

  var img = getMyImg(DocumentApp.getActiveDocument().getBody(), 'http://mychart');
  //let's insert on the current parent instead of the body 
  var parent = img.getParent(); //probably a paragraph, but does not really matter
  parent.insertInlineImage(parent.getChildIndex(img)+1, chart).setLinkUrl('http://mychart');
  img.removeFromParent();
}

function getMyImg(docBody, linkUrl) {
  var imgs = docBody.getImages();
  for( var i = 0; i < imgs.length; ++i )
    if( imgs[i].getLinkUrl() === linkUrl )
      return imgs[i];
  return null;
}

关于link_url,您当然可以像Lucidchart一样做,然后链接回您的站点。因此,这不仅对用户不利。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档