我们如何使用 google 文档 api 和 PHP 在 google 文档中插入 table 之后插入多个段落?
How we can insert multiple paragraphs after the insertion of table in google docs using google docs api with PHP?
我正在研究 google 文档 api.I 想使用 PHP.AS 创建一个 google 文档 google 文档 api要求我想要一些段落,然后插入一个 table 然后再插入一个段落,如下图所示-
我可以插入这样的文本 -
$requests[] = new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
));
我也可以这样添加table-
$requests [] = new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'endOfSegmentLocation' => [
'segmentId' => ''
],
],
]);
但是在添加这个 table 之后,我想添加另一个段落,如 pic.I 所示,在这个 table 请求之后添加了另一个插入文本请求,就像这样 -
$requests[] = new Google_Service_Docs_Request(array(
'insertText' => array(
'text' => "Paragraph 2",
'endOfSegmentLocation' => array(
'segmentId' => '',
),
),
));
但是像这样,我想在插入 table 之后添加更多段落,为此我需要索引位置,但我无法做到这一点。任何人都可以帮助我如何添加如上所示的内容 pic.I 如果有人可以帮助我完成 this.I 想要这个 PHP.
我手头没有PHP所以只能提供给大家关于如何在table之后插入段落的要求和过程。
示例文档:
插入 table 后,您需要使用 get
请求 get
文档的最后一个 endIndex
并将 body/content/endIndex
作为您的字段参数值.这将 return 使用上述示例文档的响应:
{
"body": {
"content": [
{
"endIndex": 1
},
{
"endIndex": 576
},
{
"endIndex": 614
},
{
"endIndex": 615
}
]
}
}
您必须从响应中迭代所有 endIndex
并获取最后一个(例如 615
)。从最后一个 endIndex
值中减去 1
,然后将其作为下一个插入段落响应中的索引位置传递。
示例请求:
{
"requests": [
{
"insertText": {
"location": {
"index": 614
},
"text": "\nLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\n"
}
}
]
}
输出:
注:
- 我在文本的两端用
\n
括起来,以便有一些 space。
- 您还可以将所有段落附加到一个请求中,这样您就不必每次都
get
最后一个 endIndex
。
- 您还可以使用 offsets 来计算您添加的每个字符,这样您就可以了解接下来应该使用的索引。
- 至于缩进和右对齐段落等段落格式,请参阅 changing paragraph formatting 并查看示例请求。如果您对此有疑问,我建议您 post 一个单独的 post。
你的情况,我认为当内容以相反的顺序插入时,index
可以忽略。在这种情况下,下面的示例脚本怎么样?
示例脚本 1:
$documentId = "###"; // Please set the Google Document ID.
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
)),
new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'location' => [
'index' => 1
],
],
]),
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 2',
'location' => [
'index' => 1,
]
]
))
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
示例脚本 2:
或者,如果您想在插入文本“第 1 段”和 table 后附加“第 2 段”的文本,您可以使用以下脚本附加文本。
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => "Paragraph 2", // or "\nParagraph 2"
'endOfSegmentLocation' => [
'segmentId' => ''
],
]
)),
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
- 通过这个请求,
Paragraph 2
可以附加到文档正文中。另外,在这种情况下,可以忽略放置文本的index
。
- 关于
'text' => "Paragraph 2"
,当段落与上一段相同时,您可以通过'text' => "\nParagraph 2"
创建新段落。
示例脚本 3:
如果你想通过检索索引来插入文本,你也可以使用下面的示例脚本。
$documentId = "###"; // Please set the Google Document ID.
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
)),
new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'endOfSegmentLocation' => [
'segmentId' => ''
],
],
]),
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
$obj = $service->documents->get($documentId);
$content = $obj->getBody()->getContent();
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 2',
'location' => [
'index' => end($content)->getEndIndex() - 1,
]
]
))
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => $requests
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
参考文献:
我正在研究 google 文档 api.I 想使用 PHP.AS 创建一个 google 文档 google 文档 api要求我想要一些段落,然后插入一个 table 然后再插入一个段落,如下图所示-
我可以插入这样的文本 -
$requests[] = new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
));
我也可以这样添加table-
$requests [] = new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'endOfSegmentLocation' => [
'segmentId' => ''
],
],
]);
但是在添加这个 table 之后,我想添加另一个段落,如 pic.I 所示,在这个 table 请求之后添加了另一个插入文本请求,就像这样 -
$requests[] = new Google_Service_Docs_Request(array(
'insertText' => array(
'text' => "Paragraph 2",
'endOfSegmentLocation' => array(
'segmentId' => '',
),
),
));
但是像这样,我想在插入 table 之后添加更多段落,为此我需要索引位置,但我无法做到这一点。任何人都可以帮助我如何添加如上所示的内容 pic.I 如果有人可以帮助我完成 this.I 想要这个 PHP.
我手头没有PHP所以只能提供给大家关于如何在table之后插入段落的要求和过程。
示例文档:
插入 table 后,您需要使用 get
请求 get
文档的最后一个 endIndex
并将 body/content/endIndex
作为您的字段参数值.这将 return 使用上述示例文档的响应:
{
"body": {
"content": [
{
"endIndex": 1
},
{
"endIndex": 576
},
{
"endIndex": 614
},
{
"endIndex": 615
}
]
}
}
您必须从响应中迭代所有 endIndex
并获取最后一个(例如 615
)。从最后一个 endIndex
值中减去 1
,然后将其作为下一个插入段落响应中的索引位置传递。
示例请求:
{
"requests": [
{
"insertText": {
"location": {
"index": 614
},
"text": "\nLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\n"
}
}
]
}
输出:
注:
- 我在文本的两端用
\n
括起来,以便有一些 space。 - 您还可以将所有段落附加到一个请求中,这样您就不必每次都
get
最后一个endIndex
。 - 您还可以使用 offsets 来计算您添加的每个字符,这样您就可以了解接下来应该使用的索引。
- 至于缩进和右对齐段落等段落格式,请参阅 changing paragraph formatting 并查看示例请求。如果您对此有疑问,我建议您 post 一个单独的 post。
你的情况,我认为当内容以相反的顺序插入时,index
可以忽略。在这种情况下,下面的示例脚本怎么样?
示例脚本 1:
$documentId = "###"; // Please set the Google Document ID.
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
)),
new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'location' => [
'index' => 1
],
],
]),
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 2',
'location' => [
'index' => 1,
]
]
))
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
示例脚本 2:
或者,如果您想在插入文本“第 1 段”和 table 后附加“第 2 段”的文本,您可以使用以下脚本附加文本。
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => "Paragraph 2", // or "\nParagraph 2"
'endOfSegmentLocation' => [
'segmentId' => ''
],
]
)),
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
- 通过这个请求,
Paragraph 2
可以附加到文档正文中。另外,在这种情况下,可以忽略放置文本的index
。 - 关于
'text' => "Paragraph 2"
,当段落与上一段相同时,您可以通过'text' => "\nParagraph 2"
创建新段落。
示例脚本 3:
如果你想通过检索索引来插入文本,你也可以使用下面的示例脚本。
$documentId = "###"; // Please set the Google Document ID.
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 1',
'location' => [
'index' => 1,
]
]
)),
new Google_Service_Docs_Request([
'insertTable' => [
'rows' => 4,
'columns' => 4,
'endOfSegmentLocation' => [
'segmentId' => ''
],
],
]),
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => array_reverse($requests)
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);
$obj = $service->documents->get($documentId);
$content = $obj->getBody()->getContent();
$requests = [
new Google_Service_Docs_Request(array(
'insertText' => [
'text' => 'Paragraph 2',
'location' => [
'index' => end($content)->getEndIndex() - 1,
]
]
))
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
'requests' => $requests
));
$responses = $service->documents->batchUpdate($documentId, $batchUpdateRequest);