I have the following method that adds formatted text to a data structure for it to be used in a batchUpdate request:
def add_text(
self,
text,
bold=None,
color=None,
font_size=None,
bg_color=None,
italic=None,
):
if text == "":
return
else:
# Force to string to further processing
text = str(text)
style_updates = {
"updateTextStyle": {
"range": {
"startIndex": self.index,
"endIndex": self.index + len(text),
},
"textStyle": {
"bold": False,
"italic": False,
"foregroundColor": {
"color": {
"rgbColor": {
"red": 0,
"green": 0,
"blue": 0,
}
}
},
"backgroundColor": {},
},
"fields": "bold, italic, foregroundColor, backgroundColor",
}
}
if bold:
style_updates["updateTextStyle"]["textStyle"]["bold"] = bold
if italic:
style_updates["updateTextStyle"]["textStyle"]["italic"] = italic
if color:
style_updates["updateTextStyle"]["textStyle"][
"foregroundColor"
] = {
"color": {
"rgbColor": {
"red": color[0],
"green": color[1],
"blue": color[2],
}
}
}
if font_size:
style_updates["updateTextStyle"]["textStyle"]["fontSize"] = {
"magnitude": font_size,
"unit": "PT",
}
style_updates["updateTextStyle"]["fields"] += ", fontSize"
if bg_color:
style_updates["updateTextStyle"]["textStyle"][
"backgroundColor"
] = {
"color": {
"rgbColor": {
"red": bg_color[0],
"green": bg_color[1],
"blue": bg_color[2],
}
}
}
self.updates += [
{
"insertText": {
"location": {
"index": self.index,
},
"text": text,
}
},
style_updates,
]
self.index += len(text)
The problem I'm having is that the resulting text in the target GDoc is "Heading 6" styled. I don't know where that style spec came from (the previous paragraph is "Heading 5", so it is not a hanging context that was taken). I also tried to append a paragraph style:
if style:
style_updates["updateParagraphStyle"] = {
"range": {
"startIndex": self.index,
"endIndex": self.index + len(text),
},
"paragraphStyle": {"namedStyleType": style},
"fields": "namedStyleType",
}
But it raises a Google API exception saying that it os not allowed.
Any help would be appreciated.