是否可以使用 Google Docs API 插入水平规则?

2024-04-30

我一直在开发一个项目,需要使用 PHP 将文本和其他类型的元素插入 Google 文档文档中。我可以使用以下代码插入文本:

    $requests = [];
    ```
    $requests[] = new \Google_Service_Docs_Request(
        ['insertText' => ['text' => 'Text to insert',
                          'location' => ['index' => $insertionIndex],
                          ],
         ]);
    ```
    $batchUpdateRequest = new \Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
    $docsService->documents->batchUpdate($documentID, $batchUpdateRequest);

我还可以使用类似的调用插入分页符:

    $requests = [];
    ```
    $requests[] = new \Google_Service_Docs_Request(
        ['insertPageBreak' => ['location' => ['index' => $insertionIndex],
                               ],
         ]);
    ```
    $batchUpdateRequest = new \Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
    $docsService->documents->batchUpdate($documentID, $batchUpdateRequest);

上述两种方法都工作得很好(根据谷歌的建议,当我进行多次插入时,我正在向后工作)。我需要做的就是向文档添​​加水平线。我知道 Google Docs 允许手动插入它们,并且 Apps 脚本支持 insertHorizo​​ntalRule,但 Docs API 似乎没有等效的功能。我在这里、Google 和 API 文档中进行了搜索,但找不到任何参考资料。有人可以告诉我这是否可能吗?如果可能的话,正确的请求类型是什么?

似乎也很奇怪,没有记录的插入它们的方法,但您可以查询现有文档的内容,并且文档中的任何内容都会作为其结构的一部分报告给您。

为了清楚起见,我试图将一个 Google 文档的内容附加到另一个 Google 文档中。如果有人知道比逐个元素使用源文档并创建将这些元素添加到目标文档的请求更好的方法,那么这将绕过处理插入水平规则的需要。


  • 您想要使用 Docs API 将水平线插入 Google 文档。
  • 您想使用 php 来实现这一点。
  • 您已经能够使用 Docs API 获取和放置 Google 文档的值。

我可以像上面那样理解。不幸的是,在现阶段,Google Docs API 中似乎还没有添加水平规则的方法,而“horizo​​ntalRule”可以通过以下方式检索:documents.get。 Docs API 现在正在增长。所以这可能会在未来的更新中添加。

所以现阶段需要采用workaround来解决这个问题。

模式一:

在此模式中,使用由 Google Apps 脚本创建的 Web Apps 作为 API 将水平线添加到 Google 文档中。

Usage:

1. Set Web Apps Script:

请将以下脚本复制并粘贴到 Google Apps 脚本的脚本编辑器中。

function doGet(e) {
  DocumentApp.openById(e.parameter.id).getBody().insertHorizontalRule(Number(e.parameter.index) - 1);
  return ContentService.createTextOutput("Done");
}

2. 部署Web应用程序:

  1. 在脚本编辑器上,通过“发布”->“部署为 Web 应用程序”打开一个对话框。
  2. Select "Me" for “执行应用程序:”.
  3. Select "Anyone, even anonymous" for "Who has access to the app:".
    • 此设置用于测试情况。
    • 您还可以通过设置“仅我自己”而不是“任何人,甚至匿名”来使用访问令牌进行访问。
  4. 单击“部署”按钮作为新的“项目版本”。
  5. Automatically open a dialog box of "Authorization required".
    1. 单击“查看权限”。
    2. 选择自己的帐户。
    3. 单击“此应用程序未经验证”处的“高级”。
    4. 点击“转到###项目名称###(不安全)”
    5. 单击“允许”按钮。
  6. 单击“确定”。
  7. Copy the URL of Web Apps. It's like https://script.google.com/macros/s/###/exec.
    • 当您修改 Google Apps 脚本时,请重新部署为新版本。这样,修改后的脚本就会反映到Web Apps中。请小心这一点。

3. 使用 Web 应用程序作为 API:

以下脚本适用于 PHP。请设置查询参数id and index. id是 Google 文档 ID。什么时候index=1设置后,水平线将插入到文档正文的顶部。在这种情况下,index表示 Google 文档中的每一行。

$url = 'https://script.google.com/macros/s/###/exec?id=###&index=1';
$curl = curl_init();
$option = [
  CURLOPT_URL => $url,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_FOLLOWLOCATION => true,
];
curl_setopt_array($curl, $option);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);

模式2:

我认为你的建议I'm also going to look at possible inserting a thin table with a top border line as a replacement for a horizontal rule.也可以用作解决方法。为了实现这一点,脚本如下。

运行此脚本时,将在文档顶部创建仅包含顶部行的新表。在运行脚本之前,请先设置$documentId。在这种情况下,请设置Google_Service_Docs::DOCUMENTS到范围。

示例脚本:

$documentId = '###';
$index = 1;
$style = [
    'width' => ['magnitude' => 0, 'unit' => 'PT'],
    'dashStyle' => 'SOLID',
    'color' => ['color' => ['rgbColor' => ['blue' => 1, 'green' => 1, 'red' => 1]]]
];
$requests = [
    new Google_Service_Docs_Request([
        'insertTable' => [
            'location' => ['index' => $index],
            'columns' => 1,
            'rows' => 1
        ]
    ]),
    new Google_Service_Docs_Request([
        'updateTableCellStyle' => [
            'tableCellStyle' => [
                'borderBottom' => $style,
                'borderLeft' => $style,
                'borderRight' => $style,
            ],
            'tableStartLocation' => ['index' => $index + 1],
            'fields' => 'borderBottom,borderLeft,borderRight'
        ]
    ])
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest([
  'requests' => $requests
]);
$result = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

参考:

  • Web Apps https://developers.google.com/apps-script/guides/web
  • 插入水平规则() https://developers.google.com/apps-script/reference/document/paragraph#inserthorizontalrulechildindex
  • 方法:documents.batchUpdate https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Google Docs API 插入水平规则? 的相关文章

  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • 获取 YouTube 最高缩略图分辨率

    我想获得 youtube 最高缩略图 maxresdefault jpg 像这个 http i ytimg com vi Cj6ho1 G6tw maxresdefault jpg http i ytimg com vi Cj6ho1 G6
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • 如何从网站网址中隐藏 .html 扩展名

    我知道这个问题以前曾被问过 但有人知道隐藏 html 扩展名的好方法吗 我已经尝试了许多代码和许多答案https stackoverflow com https stackoverflow com 但我没有看到结果 那是我再问你一次 我有一
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • 覆盖 FOS 用户包中的“更改密码”模板

    我做了一些研究 遗憾的是找不到任何帮助 因此 我将 FOSUserBundle ChangePasswordAction 渲染到我的模板中 但它显示供应商提供的默认模板 我的渲染控制器的模板 block body h2 Einstellun
  • ReferenceError:未定义 ConferenceDataService

    我正在尝试开发像 Zoom 会议这样的谷歌日历插件 在 appsscript json 文件中 有以下代码 calendar conferenceSolution onCreateFunction createConference id 1
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • PHP 检查当前日期是在设定日期之前还是之后

    我从数据库中提取一个日期 其格式为 dd mm YYYY 我想做的是检查当前日期 如果当前日期早于数据库中的日期 则需要打印数据库日期 如果是在之后 则需要打印 继续 有人能指出我正确的方向吗 if strtotime database d
  • session_start():无法解码会话对象

    我有时在使用 CodeIgniter 时遇到以下问题 错误 2019 03 05 19 57 26 gt 严重性 警告 gt session start 无法解码会话对象 会话已被销毁 system libraries Session Se
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 如何在 Flask 之外使用 jinja2 及其 i18n 扩展(使用 babel)

    如何在 Flask 应用程序之外将 jinja2 与 babel 一起使用 假设我有使用 pybabel 命令填充的语言环境目录 我想加载翻译文件并翻译我的模板文件 我找到了解决方案 以下是如何在不集成 Flask 的情况下使用 jinja
  • GDI+ 性能技巧 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何仅将填充应用于 Flutter 中 TextField 中的文本?

    没有填充我得到这个结果 有了这样的东西 Padding padding EdgeInsets all 20 0 child TextField 我得到以下结果 可能有点难以看清 但您只需看看边缘的红色徽章即可明白我的意思 我只想用填充来移动
  • PHP 中字符串限制为前 5 个单词或前 42 个字符

    如果我在 PHP 中有一个字符串 该字符串在 PHP 中是令人讨厌的长字符串 并且我想缩短它 然后向其添加一些内容 我想将其缩短为前 6 个单词或 42 个字符 以较短者为准 然后在缩短后附加一个 唯一不会被缩短且不添加 的情况是它最初少于
  • Java 中客户端/服务器传输的压缩字符串

    我使用专有的客户端 服务器消息格式来限制我可以通过网络发送的内容 我无法发送序列化对象 我必须将消息中的数据存储为字符串 我发送的数据是大的逗号分隔值 我想在将数据作为字符串打包到消息中之前对其进行压缩 我尝试使用 Deflater Inf
  • 画笔到画笔动画

    我设法找到了如何制作 WPF 动画 两种颜色之间的过渡 它被称为 ColorAnimation 并且效果很好 ColorAnimation animation new ColorAnimation From Colors DarkGreen
  • 删除特定值之前和之后的特定值的运行

    我有一个包含几列的数据框 基于 activity 列 我想删除特定值 pt 的整个连续运行 但前提是它们紧邻 outside 运行之前或之后发生 在下面的简化数据中 有一次运行的 activity 为 outside 并且前后都有大块 pt
  • 可以删除 .nupkg 文件吗?

    我是 NuGet 的新手 刚刚开始使用它并给自己买了一份 WatiN 的副本 我正在尝试缩小在将其放入版本控制之前撤回的文件夹的大小 我注意到 WatiN 2 0 50 nupkg 约为 12mb 我注意到从这个链接 http nuget
  • Spark 使用自定义架构读取镶木地板

    我正在尝试使用自定义架构导入镶木地板格式的数据 但它返回 类型错误 option 缺少 1 个必需的位置参数 值 ProductCustomSchema StructType StructField id sku IntegerType T
  • 消除启动时的安全警告

    打开任何 MS Access 数据库时 都会出现安全警告 指出该文件可能对计算机有害 但是 有没有办法删除此消息 或者它应该仍然是一种必要的罪恶 您也许可以签署您的程序 我不确定 读本文 http www howto outlook com
  • 使用 std::istream_iterator 限制 std::copy 的范围

    我构建了一个最小的工作示例来展示我在使用 STL 迭代器时遇到的问题 我在用着istream iterator读书floatss 或其他类型 来自 astd istream include
  • 创建 JSON 对象并将其转换为 Java 中的 String

    我需要通过 http post 发送一个相当长的 JSON 标头 在Python中是这样的 self body header client self client name clientRevision self client versio
  • 在Matlab中将矩阵中的元素i,j设置为i*j

    我想生成一个矩阵 其中 i j 元素等于 i j 其中 i j e g 0 2 3 2 0 6 3 6 0 到目前为止 我已经发现我可以使用这个索引矩阵访问非对角线元素 idx 1 eye 3 但我还没有弄清楚如何将矩阵单元的索引合并到计算
  • 如何使用 Python 将表格从 CSV 写入 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个CSV文件包含下表 users passwords company Admin test psw test cmp test
  • 资源目录不可用

    Eclipse 在问题选项卡中显示资源目录不可用 尽管它在项目文件夹树中可用 2012 09 11 12 14 43 QR01 ERROR resource directory D workspaceQR QR01 res does not
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • 在展开转场停止转场后显示警报。如何确保展开转场完成后显示警报?

    我有一个从 A 视图控制器到 B 视图控制器的展开序列 在B中完成了一次网络操作 操作完成后 响应将显示在A视图控制器中 我成功地制作了这个结构 然而有一个问题 当我尝试显示警报时 它会显示但会停止继续 我如何确保在 segue 完成后显示
  • c 中的帕斯卡三角形与递归函数

    您好 这是我用于计算帕斯卡三角形的代码 但它运行错误 已停止工作 为什么 我认为它的错误在于 paskal 函数 include
  • 如何获取有权访问bigquery中的表的所有用户/组/服务帐户

    from pprint import pprint from google oauth2 import service account import googleapiclient discovery credentials service
  • 是否可以使用 Google Docs API 插入水平规则?

    我一直在开发一个项目 需要使用 PHP 将文本和其他类型的元素插入 Google 文档文档中 我可以使用以下代码插入文本 requests requests new Google Service Docs Request insertTex