我有一个功能性 PHP 脚本,可以将纯文本添加到 Google 文档中,但我很难插入带有样式的段落。我想要达到的目标是
有
insertText
请求,但无法直接在请求中设置此文本的样式。并且没有 insertParagraph,因此每次插入文本时我什至无法创建新行。 https://developers.google.com/docs/api/reference/rest/v1/documents/request
使用 Google Docs API 是多么困难,这令人沮丧,完成这样的基本任务应该更容易,请帮忙。
我相信您的目标如下。
在这种情况下,以下示例请求正文怎么样?
为了实现您的目标,当使用batchUpdate方法时,作为示例流程,使用以下流程。
Sample1\n
和 Sample2\n
文本。Sample1\n
和Sample2\n
的文本中。https://www.google.com
设置为 Sample2\n
的文本。当该流程反映在请求主体中时,就会变成如下所示。当然,例如,您可以更改此流程,例如“1.插入
Sample1\n
。2.设置段落样式。3.插入Sample2\n
。4.设置段落样式。5.设置文本样式。”。
{
"requests": [
{
"insertText": {
"text": "Sample1\n",
"location": {
"index": 1
}
}
},
{
"insertText": {
"text": "sample2\n",
"location": {
"index": 9
}
}
},
{
"updateParagraphStyle": {
"range": {
"startIndex": 1,
"endIndex": 8
},
"paragraphStyle": {
"namedStyleType": "HEADING_1"
},
"fields": "namedStyleType"
}
},
{
"updateParagraphStyle": {
"range": {
"startIndex": 9,
"endIndex": 17
},
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT"
},
"fields": "namedStyleType"
}
},
{
"updateTextStyle": {
"range": {
"startIndex": 9,
"endIndex": 16
},
"textStyle": {
"link": {
"url": "https://www.google.com"
}
},
"fields": "link"
}
}
]
}
当您使用Docs API的batchUpdate方法的“Try this API”测试此请求正文时,您可以通过此链接进行测试。在此链接中,请求正文已设置。请准备一份示例 Google 文档并设置您的 Google 文档 ID。
当此请求正文用于 Google 文档时,将获得以下结果。
官方文档建议向后插入段落,以避免计算
updateParagraphStyle
、insertText
以及其他 Google Documents API 资源所需的索引。对于整个内容具有相同样式的段落来说,这可能很容易实现,但对于样式部分来说则不太容易实现。
要插入具有命名样式(如标题 1)的段落,请使用:
要格式化单词或短语,即将其格式化为超链接,请使用:
注意:虽然索引是从零开始的,但使用的索引是 1,因为文本应插入现有段落内。新文档有一个默认段落。
下面的示例使用
Array.prototype.reverse()
和 Array.prototype.reduce()
为 Docs.Documents.batchUpdate
制作所请求的资源对象数组。
function insertStyledParagraphs() {
const id = DocumentApp.getActiveDocument().getId();
const newParagraphs = [
{
text: 'Sample text',
style: { namedStyleType: 'HEADING_1' }
},
{
text: 'Another sample text with a link',
style: { namedStyleType: 'NORMAL_TEXT' },
links: [
{
// Should match exactly a word or phrase from the new paragraph text property
text: 'link',
url: 'https://www.example.com'
}
]
}
]
const requests = newParagraphs.reverse().reduce((arr, p) => {
arr.push(
// Insert new empty paragraph
{
insertText: {
location: {
index: 1,
},
text: `\n`,
}
},
// Update paragraph style
{
updateParagraphStyle: {
paragraphStyle: Object.assign({}, p.style),
fields: Object.keys(p.style).join(','),
range: {
startIndex: 1,
endIndex: 2
}
},
},
// insert paragraph text
{
insertText: {
location: {
index: 1,
},
text: p.text,
}
},
);
//
if (p.link) {
const start = 1 + p.text.indexOf(p.link.text);
const end = 1 + p.text.indexOf(p.link.text) + p.link.text.length;
arr.push({
updateTextStyle: {
textStyle: {
link: {
url: p.link.url
}
},
fields: 'link',
range: {
startIndex: start,
endIndex: end
}
}
})
}
return arr;
}, [])
Docs.Documents.batchUpdate({ requests }, id);
}
这可以轻松扩展以格式化段落内的文本,即将粗体、斜体、字体颜色等应用于某些单词或短语。