从 pandas 到 Excel 使用 StyleFrame:如何禁用换行文本并缩小以适合?
From pandas to Excel using StyleFrame: how to disable the wrap text & shrink to fit?
我使用 StyleFrame 从 pandas 导出到 Excel。
单元格的格式默认为 'wrap text' 和 'shrink to fit'。 (如何)我可以更改这些设置吗?
API documentation 说明 utils 模块包含最广泛使用的样式元素值,并且可以直接使用 utils 模块中不存在的值,只要 Excel认得。
在这种情况下,我需要为 Excel 指定什么?我可以从 how/where 中找出 Excel 的期望吗?非常感谢!
我尝试过的例子:
此代码完美运行:
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(bg_color=utils.colors.blue))
但我的问题是我不知道要更改什么以关闭文本环绕和缩小以适合选项:
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(text_control=wrap_text.none))
NameError: name 'wrap_text' is not defined
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(text_control=utils.wrap_text.none))
AttributeError: module 'StyleFrame.utils' has no attribute 'wrap_text'
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(utils.wrap_text.none))
AttributeError: module 'StyleFrame.utils' has no attribute 'wrap_text'
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(wrap_text=False))
TypeError: __init__() got an unexpected keyword argument 'wrap_text'
坏消息是你不能在当前版本中很好地做到这一点。
好消息是你现在可以给它打补丁,我会在下一个版本中为它公开一个 API。
from openpyxl.styles import (PatternFill, Style, Color, Border,
Side, Font, Alignment, Protection)
from StyleFrame import StyleFrame, Styler, utils
def my_create_style(self):
side = Side(border_style=self.border_type, color=utils.colors.black)
border = Border(left=side, right=side, top=side, bottom=side)
return Style(font=Font(name=self.font, size=self.font_size, color=Color(self.font_color),
bold=self.bold, underline=self.underline),
fill=PatternFill(patternType='solid', fgColor=self.bg_color),
alignment=Alignment(horizontal='center', vertical='center',
wrap_text=False, # use True/False as needed
shrink_to_fit=False, # use True/False as needed
indent=0),
border=border,
number_format=self.number_format,
protection=Protection(locked=self.protection))
Styler.create_style = my_create_style
# rest of code
请记住,这将改变所有 Styler
对象的行为。如果你想要更好的控制,你可以猴子修补单个 Styler
个实例,但这需要更多的创造力:
from functools import partial
# ... and rest of imports from above example
# same code as above
a_style = Styler(bg_color=utils.colors.blue)
# this needs to be done BEFORE applying
a_style.create_style = partial(my_create_style, a_style)
sf.apply_column_style(cols_to_style=['A'], styler_obj=a_style)
从版本 1.3 开始,可以将 wrap_text
和 shrink_to_fit
直接传递给 Styler
,例如 no_wrap_text_style = Styler(wrap_text=False)
我使用 StyleFrame 从 pandas 导出到 Excel。
单元格的格式默认为 'wrap text' 和 'shrink to fit'。 (如何)我可以更改这些设置吗?
API documentation 说明 utils 模块包含最广泛使用的样式元素值,并且可以直接使用 utils 模块中不存在的值,只要 Excel认得。
在这种情况下,我需要为 Excel 指定什么?我可以从 how/where 中找出 Excel 的期望吗?非常感谢!
我尝试过的例子:
此代码完美运行:
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(bg_color=utils.colors.blue))
但我的问题是我不知道要更改什么以关闭文本环绕和缩小以适合选项:
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(text_control=wrap_text.none))
NameError: name 'wrap_text' is not defined
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(text_control=utils.wrap_text.none))
AttributeError: module 'StyleFrame.utils' has no attribute 'wrap_text'
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(utils.wrap_text.none))
AttributeError: module 'StyleFrame.utils' has no attribute 'wrap_text'
sf.apply_column_style(cols_to_style=['A'], styler_obj=Styler(wrap_text=False))
TypeError: __init__() got an unexpected keyword argument 'wrap_text'
坏消息是你不能在当前版本中很好地做到这一点。
好消息是你现在可以给它打补丁,我会在下一个版本中为它公开一个 API。
from openpyxl.styles import (PatternFill, Style, Color, Border,
Side, Font, Alignment, Protection)
from StyleFrame import StyleFrame, Styler, utils
def my_create_style(self):
side = Side(border_style=self.border_type, color=utils.colors.black)
border = Border(left=side, right=side, top=side, bottom=side)
return Style(font=Font(name=self.font, size=self.font_size, color=Color(self.font_color),
bold=self.bold, underline=self.underline),
fill=PatternFill(patternType='solid', fgColor=self.bg_color),
alignment=Alignment(horizontal='center', vertical='center',
wrap_text=False, # use True/False as needed
shrink_to_fit=False, # use True/False as needed
indent=0),
border=border,
number_format=self.number_format,
protection=Protection(locked=self.protection))
Styler.create_style = my_create_style
# rest of code
请记住,这将改变所有 Styler
对象的行为。如果你想要更好的控制,你可以猴子修补单个 Styler
个实例,但这需要更多的创造力:
from functools import partial
# ... and rest of imports from above example
# same code as above
a_style = Styler(bg_color=utils.colors.blue)
# this needs to be done BEFORE applying
a_style.create_style = partial(my_create_style, a_style)
sf.apply_column_style(cols_to_style=['A'], styler_obj=a_style)
从版本 1.3 开始,可以将 wrap_text
和 shrink_to_fit
直接传递给 Styler
,例如 no_wrap_text_style = Styler(wrap_text=False)