如何以编程方式设置开始标签和结束标签之间的文本格式,然后删除标签

2024-03-27

编辑:以下工作与 Google Apps 脚本有关,用于格式化 Google 文档中的文本。

我不熟悉 JavaScript,实际上只完成了一些 R 编码,因此这项工作是对我可以在 google 上搜索到的内容进行一些解析以及一些尝试和错误。我取得了一些有希望的成功,但在找到以下场景的完整答案时也遇到了一些困难。

Context

我有一个嵌入合并代码的谷歌文档模板。一个单独的应用程序正在从对象和相关对象中提取数据字段,并用未格式化的文本替换这些合并代码。该应用程序的一个副作用是我无法提前格式化合并代码,以便在替换时,文本格式正确。因此,我尝试创建一个脚本来运行以下文本合并,以编程方式应用一些格式。

我需要的

我需要应用三种不同的风格。我正在创建代码来搜索开始标签和结束标签,然后格式化之间的文本。在完美的世界中,标签也会从文档中删除,只留下格式化的文本。

Styled Item Tags Formatting to be applied
Requests <req> </req> Roboto 10, Bold, #4a5356
Citations <cit> </cit> Lato 8, Bold, #4A5356
Conclusions <con> </con> Lato 8, Bold, #B38F00

到目前为止的代码

function onOpen() {
  DocumentApp.getUi().createMenu('Butler')
      .addItem('Format Headings', 'FormatRequests')

      .addToUi();
}

function FormatRequests() {
  var startTag = '<req>';
  var endTag = '</req>'
  var body = DocumentApp.getActiveDocument().getBody();
  var para = body.getParagraphs();
  for(var i in para){  
    var from = para[i].findText(startTag);
    var to =  para[i].findText(endTag,from);
    if((to != null && from != null) && ((to.getStartOffset()-1) - (from.getStartOffset()+startTag.length) > 0) ){
      para[i].editAsText().setBold(from.getStartOffset()+startTag.length, to.getStartOffset()-1, true);
    }
  }
}

到目前为止,我已经成功找到标签并将标签之间的文本设置为粗体。但我不知道如何继续应用其余的格式,也不知道如何在应用格式后删除标签。

有任何想法吗?


尝试这个:

function main() {

  handle_tags(['<req>', '</req>'], "Roboto", 10, "Bold", "#4a5356");
  handle_tags(['<cit>', '</cit>'], "Lato", 8, "Bold", "#4a5356");
  handle_tags(['<con>', '</con>'], "Lato", 8, "Bold", "#B38F00");
  
}

function handle_tags(tags, family, size, style, color) {

  var body      = DocumentApp.getActiveDocument().getBody();
  var start_tag = tags[0];
  var end_tag   = tags[1];
  
  var found     = body.findText(start_tag);

  while (found) {
    var elem    = found.getElement();
    var start   = found.getEndOffsetInclusive();
    var end     = body.findText(end_tag, found).getStartOffset()-1;

    elem.setFontFamily(start, end, family);
    elem.setFontSize(start, end, size);
    elem.setForegroundColor(start, end, color);

    switch (style.toLowerCase()) {
      case 'bold': elem.setBold(start, end, true); break;
      case 'italic': elem.setItalic(start, end, true); break;
      case 'underline': elem.setUnderline(start, end, true); break;
    }

    found = body.findText(start_tag, found);
  }

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

如何以编程方式设置开始标签和结束标签之间的文本格式,然后删除标签 的相关文章

随机推荐

  • 如何制作逆序的for循环?

    编者注 这个问题是在 Rust 1 0 发布之前提出的 引入了 范围 运算符 该问题的代码不再代表当前的风格 但下面的一些答案使用了适用于 Rust 1 0 及更高版本的代码 我当时正在玩Rust 示例网站 https rustbyexam
  • 在 DOS/Batch 中,08 小于 1,但 07 大于 1。为什么?

    在 DOS 批处理中 if 08 lss 1 echo true 与 真 相呼应 09也是如此 08和09都小于1 However if 07 lss 1 echo true 不回显任何内容 01至07不小于1 为什么 08年和09年有什么
  • WebGL 绘制图像

    我是 WebGL 新手 之前在 Java 中使用过 OpenGL 我一直在尝试编写一个简单的函数 该函数以特定的大小和旋转在特定位置绘制图像 但在网上搜索了一段时间后 我的代码仍然无法运行 目前 我已经成功绘制了图像 但是该图像距离正确的位
  • 如何监听Hyperledger Fabric中的事件(commit事件)?

    我们建立了一个结构服务器 并将一些事务放入其中 我们有一些应用程序将与结构服务器配合 这是一个情况 应用程序发送交易fabric sdk java or fabric sdk node 面料执行chaincode 结构通知应用程序结果 应用
  • python中函数的精确计时

    我正在 Windows 上用 python 编程 希望准确测量函数运行所需的时间 我编写了一个函数 time it 它接受另一个函数 运行它 并返回运行所花费的时间 def time it f args start time clock f
  • ORA-02270: 此列列表没有匹配的唯一键或主键

    我有一张表 结构是 CREATE TABLE COURSE ACCREDITED COURSE ID VARCHAR2 50 NOT NULL ENABLE ACCREDITATION BODY ID VARCHAR2 50 NOT NUL
  • 如何覆盖 Material-ui 的选项卡选择颜色?

    我正在使用 Materialui tabs 主题构建 React 16 13 0 应用程序 https material ui com api tab https material ui com api tab 我在我的组件中创建了这些样式
  • 张量流是否通过pdf传播梯度

    可以说 分布函数定义如下 dist tf contrib distributions Normal mu sigma 并从分布中抽取样本 val dist pdf x 并且该值在模型中用于预测变量 X hat f val loss tf n
  • 使用指针传递引用和值[重复]

    这个问题在这里已经有答案了 我不明白为什么将指针传递给函数不会更改传入的数据 如果函数原型如下所示 void func int p 并且 func 为 p 分配了内存 为什么不能在函数外部使用它 我以为指针就是地址 虽然这样的事情符合你的期
  • 我如何使用肘节检查连接性?

    我需要使用连接库检查应用程序内每个页面的连接性 所以我将在提供者内部使用一肘 问题是何时关闭流以便在用户关闭应用程序时可以处理它 像这样 import package connectivity connectivity dart overr
  • 比较 sbt 和 Gradle [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在深入研究 Scala 并注意到 sbt 我对 java groovy 项目中的 Gradle 非常满意 而且我知道 Gradle 有一个
  • 使用 R 在时间序列图中标记 X 轴

    我对 R 有点陌生 一般绘图经验有限 我已经能够使用zoo将我的数据作为R中的时间序列对象来获取 但是我很难正确标记xaxis 如果这一切的话 当我绘制动物园对象时 plot z x 轴仅显示一个标签 即 2010 年 该系列从 2009
  • 在Javascript中实现迷宫生成算法[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我了解 深度优先 迷宫生成算法 但我
  • 在每第 3 个 div Jquery 之后附加 Span 标签

    我正在寻找在每三个 div 标签之后放置一个 span 标签的解决方案 HTML div class grid 15 div class grid 5 p Sun p div div class suggest nudge up span
  • 护照认证失败导致重定向循环

    我正在使用带有 Facebook 身份验证的 Node Express 和 Passport 我有以下路线 当 facebook auth callback是回调url function render page req res var us
  • 不推荐使用带大括号的数组和字符串偏移访问语法

    我刚刚将我的 php 版本更新到 7 4 我注意到弹出了这个错误 不推荐使用带大括号的数组和字符串偏移访问语法 这是我的代码的一部分 它触发了上述错误 public function getRecordID string zoneID st
  • 无法在 IOS 上通过 CORS 发送凭据

    我有一个恶作剧问题 在解决这个问题很长时间后我来找你 我有一个具有以下规格的混合应用程序 Ionic 3 9 2 Angular 5 2 11 Cordova Android 8 1 0 and iOS 5 1 1 Cordova 8 0
  • UISearchBar显示错误:文本太左,与放大镜图标重叠

    我遇到了最奇怪的显示错误UISearchBar 这是我的代码 在另一个应用程序中完美运行 我在代码中创建搜索栏 因为 xib 文件不可行 searchBar UISearchBar alloc initWithFrame CGRectMak
  • 将 ForEach 与绑定数组一起使用 (SwiftUI)

    我的目标是从 JSON 动态生成表单 除了生成 FormField 视图 基于 TextField 并绑定到动态生成的视图模型列表之外 我已将所有内容放在一起 如果我将 FormField 视图替换为普通的 Text 视图 则效果很好 请参
  • 如何以编程方式设置开始标签和结束标签之间的文本格式,然后删除标签

    编辑 以下工作与 Google Apps 脚本有关 用于格式化 Google 文档中的文本 我不熟悉 JavaScript 实际上只完成了一些 R 编码 因此这项工作是对我可以在 google 上搜索到的内容进行一些解析以及一些尝试和错误