如何使用 pygsheets 在 Google Sheet 中旋转文本?
How do I rotate text in a Google Sheet using pygsheets?
我正在尝试使用 python 中的 pygsheets 旋转 Google Sheet 中一些长 header 名称的文本。下面的代码显示了对 pygsheets 中提供的示例的轻微修改,根据 docs 应该可以工作。文本写入正确的单元格,单元格 A1 为粗体,但单元格 B1 和 C1 未旋转。没有出现错误消息。知道为什么这不起作用吗?
import pygsheets
sheet_url = "https://docs.google.com/spreadsheets/d/1t3nYyvkVkf6E36vTRucRQ35XQWbeRC--6U5h1chtikI"
gc = pygsheets.authorize(service_file = "credentials.json")
sh = gc.open_by_url(sheet_url)
wks = sh.worksheet("title", "Sheet1")
header = wks.cell('A1')
header.value = 'Bold Text'
header.set_text_format('bold', True)
header.update()
header2 = wks.cell('B1')
header2.value = '45 Degree rotated text'
header2.set_text_rotation('angle', 45)
header2.update()
header3 = wks.cell('C1')
header3.value = 'Vertical Text'
header3.set_text_rotation('vertical', True)
header3.update()
结果:
resulting spreadsheet
- 您想将 "textRotation" 个工作表 API 与 pyghseets 一起使用。
如果我的理解是正确的,这个答案怎么样?在我的环境中,我还可以确认您也遇到了同样的问题。所以当我看到"pygsheets"的脚本时,我注意到了脚本的修改点
虽然设置了textRotation
的参数,但是不幸的是,textRotation
没有包含在请求正文中。这样,textRotation
不起作用。
修改后的脚本:
使用此修改时,请将安装的"pygsheets"目录下的cell.py
的get_json()
修改如下。我认为可能会有更简单的修改。所以请把这当作几个答案之一。
def get_json(self):
"""Returns the cell as a dictionary structured like the Google Sheets API v4."""
try:
nformat, pattern = self.format
except TypeError:
nformat, pattern = self.format, ""
if self._formula != '':
value = self._formula
value_key = 'formulaValue'
elif is_number(self._value):
value = self._value
value_key = 'numberValue'
elif type(self._value) is bool:
value = self._value
value_key = 'boolValue'
elif type(self._value) is str or type(self._value) is unicode:
value = self._value
value_key = 'stringValue'
else: # @TODO errorValue key not handled
value = self._value
value_key = 'errorValue'
ret_json = dict()
ret_json["userEnteredFormat"] = dict()
if self.format[0] is not None:
ret_json["userEnteredFormat"]["numberFormat"] = {"type": getattr(nformat, 'value', nformat),
"pattern": pattern}
if self._color[0] is not None:
ret_json["userEnteredFormat"]["backgroundColor"] = {"red": self._color[0], "green": self._color[1],
"blue": self._color[2], "alpha": self._color[3]}
if self.text_format is not None:
ret_json["userEnteredFormat"]["textFormat"] = self.text_format
fg = ret_json["userEnteredFormat"]["textFormat"].get('foregroundColor', None)
if fg:
ret_json["userEnteredFormat"]["textFormat"]['foregroundColor'] = {"red": fg[0], "green": fg[1],
"blue": fg[2], "alpha": fg[3]}
if self.borders is not None:
ret_json["userEnteredFormat"]["borders"] = self.borders
if self._horizontal_alignment is not None:
ret_json["userEnteredFormat"]["horizontalAlignment"] = self._horizontal_alignment.value
if self._vertical_alignment is not None:
ret_json["userEnteredFormat"]["verticalAlignment"] = self._vertical_alignment.value
if self._wrap_strategy is not None:
ret_json["userEnteredFormat"]["wrapStrategy"] = self._wrap_strategy
### Added -- begin
if self.text_rotation is not None:
ret_json["userEnteredFormat"]["textRotation"] = self.text_rotation
### Added -- end
if self._note is not None:
ret_json["note"] = self._note
ret_json["userEnteredValue"] = {value_key: value}
return ret_json
结果:
反映上述修改后,您的脚本将获得以下结果。
注:
- 此修改后的脚本假设 Sheets API 已经可以使用了。
- 我在将 pygsheets 更新为 "pygsheets-2.0.1" 后调查了上述修改。
参考文献:
在我的环境中,我可以确认 "textRotation" 通过上述修改工作。但如果这在您的环境中不起作用,我深表歉意。
我正在尝试使用 python 中的 pygsheets 旋转 Google Sheet 中一些长 header 名称的文本。下面的代码显示了对 pygsheets 中提供的示例的轻微修改,根据 docs 应该可以工作。文本写入正确的单元格,单元格 A1 为粗体,但单元格 B1 和 C1 未旋转。没有出现错误消息。知道为什么这不起作用吗?
import pygsheets
sheet_url = "https://docs.google.com/spreadsheets/d/1t3nYyvkVkf6E36vTRucRQ35XQWbeRC--6U5h1chtikI"
gc = pygsheets.authorize(service_file = "credentials.json")
sh = gc.open_by_url(sheet_url)
wks = sh.worksheet("title", "Sheet1")
header = wks.cell('A1')
header.value = 'Bold Text'
header.set_text_format('bold', True)
header.update()
header2 = wks.cell('B1')
header2.value = '45 Degree rotated text'
header2.set_text_rotation('angle', 45)
header2.update()
header3 = wks.cell('C1')
header3.value = 'Vertical Text'
header3.set_text_rotation('vertical', True)
header3.update()
结果: resulting spreadsheet
- 您想将 "textRotation" 个工作表 API 与 pyghseets 一起使用。
如果我的理解是正确的,这个答案怎么样?在我的环境中,我还可以确认您也遇到了同样的问题。所以当我看到"pygsheets"的脚本时,我注意到了脚本的修改点
虽然设置了textRotation
的参数,但是不幸的是,textRotation
没有包含在请求正文中。这样,textRotation
不起作用。
修改后的脚本:
使用此修改时,请将安装的"pygsheets"目录下的cell.py
的get_json()
修改如下。我认为可能会有更简单的修改。所以请把这当作几个答案之一。
def get_json(self):
"""Returns the cell as a dictionary structured like the Google Sheets API v4."""
try:
nformat, pattern = self.format
except TypeError:
nformat, pattern = self.format, ""
if self._formula != '':
value = self._formula
value_key = 'formulaValue'
elif is_number(self._value):
value = self._value
value_key = 'numberValue'
elif type(self._value) is bool:
value = self._value
value_key = 'boolValue'
elif type(self._value) is str or type(self._value) is unicode:
value = self._value
value_key = 'stringValue'
else: # @TODO errorValue key not handled
value = self._value
value_key = 'errorValue'
ret_json = dict()
ret_json["userEnteredFormat"] = dict()
if self.format[0] is not None:
ret_json["userEnteredFormat"]["numberFormat"] = {"type": getattr(nformat, 'value', nformat),
"pattern": pattern}
if self._color[0] is not None:
ret_json["userEnteredFormat"]["backgroundColor"] = {"red": self._color[0], "green": self._color[1],
"blue": self._color[2], "alpha": self._color[3]}
if self.text_format is not None:
ret_json["userEnteredFormat"]["textFormat"] = self.text_format
fg = ret_json["userEnteredFormat"]["textFormat"].get('foregroundColor', None)
if fg:
ret_json["userEnteredFormat"]["textFormat"]['foregroundColor'] = {"red": fg[0], "green": fg[1],
"blue": fg[2], "alpha": fg[3]}
if self.borders is not None:
ret_json["userEnteredFormat"]["borders"] = self.borders
if self._horizontal_alignment is not None:
ret_json["userEnteredFormat"]["horizontalAlignment"] = self._horizontal_alignment.value
if self._vertical_alignment is not None:
ret_json["userEnteredFormat"]["verticalAlignment"] = self._vertical_alignment.value
if self._wrap_strategy is not None:
ret_json["userEnteredFormat"]["wrapStrategy"] = self._wrap_strategy
### Added -- begin
if self.text_rotation is not None:
ret_json["userEnteredFormat"]["textRotation"] = self.text_rotation
### Added -- end
if self._note is not None:
ret_json["note"] = self._note
ret_json["userEnteredValue"] = {value_key: value}
return ret_json
结果:
反映上述修改后,您的脚本将获得以下结果。
注:
- 此修改后的脚本假设 Sheets API 已经可以使用了。
- 我在将 pygsheets 更新为 "pygsheets-2.0.1" 后调查了上述修改。
参考文献:
在我的环境中,我可以确认 "textRotation" 通过上述修改工作。但如果这在您的环境中不起作用,我深表歉意。