首页 > 解决方案 > 如何使用 Python API 在 Google Docs 中找到子字符串的 startIndex

问题描述

根据 Google Docs API 文档推荐,我创建了一个文档模板,其中包含“占位符”,例如{{my_text_goes_here}}为了使用replaceAllText请求将占位符替换为我自己的文本。到目前为止,一切都很好。

但是,我不仅想插入新文本,而且还想格式化它。我的问题是检索startIndex这个新文本(或以前的占位符)。API中没有任何findlocate请求。

我尝试检索整个文档的文本(此处为指南),找到占位符在文本中的位置,并将其用作startIndex新文本的格式(使用updateTextStyle请求)。不幸的是,这个值是不正确的,并且格式没有应用到它应该应用的地方。我想这可能与 UTF-16 编码或某些隐藏字符有关...

我正在尝试做的是一个非常基本的操作,但它需要如此复杂的代码才能实现它使整个 API 变得无用,除了基本的发票组合(我们已经在 20 年前使用 Word 和 Outlook 做到了......)

我错过了什么??

标签: pythonapirestgoogle-docs-api

解决方案


可能不像您希望的那样基本,但您可以做什么:

使用方法documents.get将字段设置为body/content/paragraph/elements(startIndex,textRun/content)

这将返回一个 JSON 类型:

{
  "body": {
    "content": [
      {},
      {
        "paragraph": {
          "elements": [
            {
              "startIndex": 1,
              "textRun": {
                "content": "freter"
              }
            },
            {
              "startIndex": 7,
              "textRun": {
                "content": "\n"
              }
            }
          ]
        }
      },
      {
        "paragraph": {
          "elements": [
            {
              "startIndex": 8,
              "textRun": {
                "content": "Htrhyt "
              }
            },
            {
              "startIndex": 15,
              "textRun": {
                "content": "{{my_text_goes_here}}"
              }
            },
            {
              "startIndex": 36,
              "textRun": {
                "content": "  gtrtry\n"
              }
            }
          ]
        }
      }
    ]
  }
}

然后,您可以通过编程方式将每个内容的内容与匹配元素的内容进行textRun对比{{my_text_goes_here}}并检索startIndex

对于上面的示例,您的结果将是:

           {
              "startIndex": 15,
              "textRun": {
                "content": "{{my_text_goes_here}}"
              }
            }

推荐阅读