更新/替换 Google 文档上的内嵌图像

2024-02-27

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

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

这可行,但我遇到了 Lucidchart 不会出现的以下问题:

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

有谁知道替换/更新 Google 文档上引用图像的好策略,就像 Lucidchart 附加更新功能的工作方式一样?

Thanks


当范围移动时,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 那样链接回您的网站。所以这不仅仅是对用户造成的破坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新/替换 Google 文档上的内嵌图像 的相关文章

随机推荐

  • 是否存在与 Fortran 配合良好的 ncurses 或类似库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 ncurses 库 最初是用 C 语言开发的 如果没记错的话 是否有一个端口 或者是否存在可以在 Wi
  • 是否可以对用笔尖初始化的 WindowController 进行单元测试?

    我有一个简单的 Mac OS 应用程序 默认情况下MainMenu xib 在那里我有第二个窗口用于偏好设置和PreferencesWindowController 我想让以下测试工作 implementation TestPreferen
  • 带有两个参数包的函数模板重载解析

    考虑以下代码 include
  • Prop 和 Type 的不同归纳原理

    我注意到 Coq 综合了关于 Prop 和 Type 等式的不同归纳原理 有人对此有解释吗 平等定义为 Inductive eq A Type x A A gt Prop eq refl x x 与之相关的归纳原理有以下类型 eq ind
  • JTextArea 更新为 DocumentListener

    JTextArea area1 new JTextArea JTextArea area2 new JTextArea DocumentListener documentListener new DocumentListener publi
  • 使用模块中的方法模拟类

    我正在使用 PowerShell 2 0 无法升级 并且正在编写一系列使用 Active Directory 中的一些信息的脚本 来自 C 等 OOP 语言 我想在 PowerShell 2 0 中模拟一个类 但我知道它们只有class5
  • 程序卡住,管道文件描述符何时不应该打开?

    我正在创建一个可以读取命令的小 shell 当我运行我的程序并输入 cat file txt gt file2 txt 它创建了文件 然后卡在了这一行 if execvp structVariables gt argv 0 argv lt
  • 矩阵的滑动窗口求和

    我有一个 50x50 矩阵 我想对每个 10x10 或另一个设定大小值 始终是正方形 重叠网格中的值求和 即 为了清楚起见 重叠的窗口仅以对角线显示 我尝试做的第一个任务是定义每个窗口的坐标 win 10 start 1 10 1 10 f
  • PHP cURL,使用 CURLOPT_RETURNTRANSFER 时出现内存泄漏

    下面的代码是在一个循环中 每个循环都会将 URI 更改为新地址 我的问题是每次传递都会占用越来越多的内存 ch curl init curl setopt ch CURLOPT URL URI curl setopt ch CURLOPT
  • MySQL 与 Sequelize:ER_BAD_DB_ERROR:未知数据库

    我正在遵循教程 下面是代码 var Sequelize require sequelize var sequelize new Sequelize basic mysql database mysql root password diale
  • 如何在 Ruby 中执行相当于 's3cmd ls s3://some_bucket/foo/bar' 的操作?

    如何在 Ruby 中执行相当于 s3cmd ls s3 some bucket foo bar 的操作 我找到了适用于 Ruby 的 Amazon S3 gem 以及正确的 AWS S3 库 但不知何故 如何在 S3 文件夹 之类的位置上执
  • MessageKit 不显示消息输入栏 Swift 5

    这是控制器层次结构 tabBarController gt 一些控制器和聊天频道控制器 并且这个聊天频道控制器也是一个导航控制器 当我选择行时 它会推送到 MessageViewController 类的聊天控制器 我这里有两个问题 一是小
  • 为什么使用 Tiled 的 libgdx 游戏中出现线条?

    我正在使用 LibGdx 和 Tiled 当在屏幕上移动时 游戏上会出现水平线和垂直线 如果需要的话 我可以发布您需要的任何代码 我怎样才能让这些线路停止 这是一个 gfycat gif 的线条 http gfycat com FastUn
  • QML - MouseArea/MouseEvent 问题

    下面的代码生成一个白色矩形 其中包含一个红色矩形和一个灰色矩形 每个矩形都有一个关联的 MouseArea 当鼠标在灰色矩形内单击时 灰色矩形会变成蓝色 当鼠标光标进入红色矩形内部时 红色矩形会打印一条控制台消息 当发出释放信号时 会打印另
  • 我如何比较“Bcrypt”Gem 解密的密码和加密的密码

    我正在尝试对某些帖子的评论使用简单的身份验证 用户使用即时 ID 和密码输入评论 我使用 bcrypt gem 将密码存储在数据库中 就像comments controller rb中这样 comment Comment new comme
  • Django 中子查询的查询

    我正在尝试从另一个查询执行查询 但 Django 说 渲染时捕获数据库错误 子查询返回超过 1 行 我正在使用 PostGis my model class Place models Model coordinate models Poin
  • 通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头

    我在我的一个项目中对所有 PHP 程序编写了相同的代码行 是否可以在目录的 htaccess 中执行此操作 如何 PHP 代码 Header Content Type application xhtml xml charset utf 8
  • 混淆矩阵和列联表有什么区别?

    我正在编写一段代码来评估我的聚类算法 我发现每种评估方法都需要来自m n类似矩阵A aij where aij是属于类成员的数据点的数量ci和簇的元素kj 但似乎有两个这种类型的矩阵数据挖掘简介 Pang Ning Tan 等 一个是混淆矩
  • iOS:无法启动 .app 文件

    我不知道为什么它在我的 app 文件中寻找目录 每次我运行应用程序时 它都会在 iPhone 上安装应用程序 但不会运行并给出以下错误 谁能告诉我这个设置存储在哪里 谢谢 error failed to launch Users xxx L
  • 更新/替换 Google 文档上的内嵌图像

    我正在尝试设置一个功能来更新 Google 文档上的图像 就像 Lucidchart Add on 对其 更新插入图表 功能所做的那样 为此 我目前正在执行以下操作 创建命名范围并将其 id 与生成图像的数据一起存储在文档属性中 以供以后检