gpt4 book ai didi

google-apps-script - 更新/替换 Google 文档上的内嵌图片

转载 作者:行者123 更新时间:2023-12-03 13:58:25 25 4
gpt4 key购买 nike

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

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

  • 这有效,但我有以下 Lucidchart 不会发生的问题:
  • 每次更新,图像后都会添加一个空行。
  • 如果用户将图像拖放到文档内以重新定位它,命名范围将消失,我以后无法检索它。
  • 如果用户将图像集中,更新后图像会回到左侧位置,甚至复制其属性

  • 有没有人知道在 Google Docs 上替换/更新引用图像的好策略,与 Lucidchart 附加更新功能的工作方式相同?

    谢谢

    最佳答案

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

    对于图像,您可以使用其 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 那样链接回您的网站。所以它不仅仅是对用户来说是坏的。

    关于google-apps-script - 更新/替换 Google 文档上的内嵌图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597379/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com