-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
docs.gs
172 lines (167 loc) · 5.42 KB
/
docs.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/**
* Copyright Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// [START docs_create_document]
/**
* Create a new document.
* @see https://developers.google.com/docs/api/reference/rest/v1/documents/create
* @return {string} documentId
*/
function createDocument() {
try {
// Create document with title
const document = Docs.Documents.create({'title': 'My New Document'});
console.log('Created document with ID: ' + document.documentId);
return document.documentId;
} catch (e) {
// TODO (developer) - Handle exception
console.log('Failed with error %s', e.message);
}
}
// [END docs_create_document]
// [START docs_find_and_replace_text]
/**
* Performs "replace all".
* @param {string} documentId The document to perform the replace text operations on.
* @param {Object} findTextToReplacementMap A map from the "find text" to the "replace text".
* @return {Object} replies
* @see https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
*/
function findAndReplace(documentId, findTextToReplacementMap) {
const requests = [];
for (const findText in findTextToReplacementMap) {
const replaceText = findTextToReplacementMap[findText];
// One option for replacing all text is to specify all tab IDs.
const request = {
replaceAllText: {
containsText: {
text: findText,
matchCase: true
},
replaceText: replaceText,
tabsCriteria: {
tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3],
}
}
};
// Another option is to omit TabsCriteria if you are replacing across all tabs.
const request = {
replaceAllText: {
containsText: {
text: findText,
matchCase: true
},
replaceText: replaceText
}
};
requests.push(request);
}
try {
const response = Docs.Documents.batchUpdate({'requests': requests}, documentId);
const replies = response.replies;
for (const [index] of replies.entries()) {
const numReplacements = replies[index].replaceAllText.occurrencesChanged || 0;
console.log('Request %s performed %s replacements.', index, numReplacements);
}
return replies;
} catch (e) {
// TODO (developer) - Handle exception
console.log('Failed with error : %s', e.message);
}
}
// [END docs_find_and_replace_text]
// [START docs_insert_and_style_text]
/**
* Insert text at the beginning of the first tab in the document and then style
* the inserted text.
* @param {string} documentId The document the text is inserted into.
* @param {string} text The text to insert into the document.
* @return {Object} replies
* @see https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
*/
function insertAndStyleText(documentId, text) {
const requests = [{
insertText: {
location: {
index: 1,
// A tab can be specified using its ID. When omitted, the request is
// applied to the first tab.
// tabId: TAB_ID
},
text: text
}
},
{
updateTextStyle: {
range: {
startIndex: 1,
endIndex: text.length + 1
},
textStyle: {
fontSize: {
magnitude: 12,
unit: 'PT'
},
weightedFontFamily: {
fontFamily: 'Calibri'
}
},
fields: 'weightedFontFamily, fontSize'
}
}];
try {
const response =Docs.Documents.batchUpdate({'requests': requests}, documentId);
return response.replies;
} catch (e) {
// TODO (developer) - Handle exception
console.log('Failed with an error %s', e.message);
}
}
// [END docs_insert_and_style_text]
// [START docs_read_first_paragraph]
/**
* Read the first paragraph of the first tab in a document.
* @param {string} documentId The ID of the document to read.
* @return {Object} paragraphText
* @see https://developers.google.com/docs/api/reference/rest/v1/documents/get
*/
function readFirstParagraph(documentId) {
try {
// Get the document using document ID
const document = Docs.Documents.get(documentId, {'includeTabsContent': true});
const firstTab = document.tabs[0];
const bodyElements = firstTab.documentTab.body.content;
for (let i = 0; i < bodyElements.length; i++) {
const structuralElement = bodyElements[i];
// Print the first paragraph text present in document
if (structuralElement.paragraph) {
const paragraphElements = structuralElement.paragraph.elements;
let paragraphText = '';
for (let j = 0; j < paragraphElements.length; j++) {
const paragraphElement = paragraphElements[j];
if (paragraphElement.textRun !== null) {
paragraphText += paragraphElement.textRun.content;
}
}
console.log(paragraphText);
return paragraphText;
}
}
} catch (e) {
// TODO (developer) - Handle exception
console.log('Failed with error %s', e.message);
}
}
// [END docs_read_first_paragraph]