Python xlwt-访问现有单元格内容,自动调整列宽
我试图创建一个Excel工作簿,在保存工作簿之前可以自动设置或自动调整列的宽度。
我一直在阅读的Python的Excel的教程在xlwt是模仿xlrd者(如发现某些功能的希望sheet_names()
,cellname(row,
col),cell_type
,cell_value
,等…)。例如,假设我有以下几点:
from xlwt import Workbook wb = Workbook()
sh1 = wb.add_sheet('sheet1' , cell_overwrite_ok = True)
sh2 = wb.get_sheet(0)
wb.get_sheet(0)
与rb.sheet_by_index(0)
xlrd中提供的功能类似,除了前者允许您修改内容(如果用户已设置cell_overwrite_ok
= True)
假设xlwt确实提供了我想要的功能,我计划再次遍历每个工作表,但是这次要跟踪占用特定列最多空间的内容,并根据此内容设置列宽。当然,我也可以在写入工作表时跟踪特定列的最大宽度,但是我觉得在所有数据都已写入之后设置宽度会更干净。
有谁知道我能做到吗?如果没有,您建议如何调整列宽?
回答:
我刚刚实现了一个包装器类,该类可以在您输入物品时跟踪它们的宽度。看来效果很好。
import arial10class FitSheetWrapper(object):
"""Try to fit columns to max size of any entry.
To use, wrap this around a worksheet returned from the
workbook's add_sheet method, like follows:
sheet = FitSheetWrapper(book.add_sheet(sheet_name))
The worksheet interface remains the same: this is a drop-in wrapper
for auto-sizing columns.
"""
def __init__(self, sheet):
self.sheet = sheet
self.widths = dict()
def write(self, r, c, label='', *args, **kwargs):
self.sheet.write(r, c, label, *args, **kwargs)
width = arial10.fitwidth(label)
if width > self.widths.get(c, 0):
self.widths[c] = width
self.sheet.col(c).width = width
def __getattr__(self, attr):
return getattr(self.sheet, attr)
所有的魔力都在杨John的arial10
模块中。对于默认的Excel字体Arial
10,它具有良好的宽度。如果要使用其他字体编写工作表,则需要更改fitwidth函数,最好考虑style
传递给的参数FitSheetWrapper.write
。
以上是 Python xlwt-访问现有单元格内容,自动调整列宽 的全部内容, 来源链接: utcz.com/qa/407688.html