Python xlwt-访问现有单元格内容,自动调整列宽

我试图创建一个Excel工作簿,在保存工作簿之前可以自动设置或自动调整列的宽度。

我一直在阅读的Python的Excel的教程在xlwt是模仿xlrd者(如发现某些功能的希望sheet_names()cellname(row,

col)cell_typecell_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 arial10

class 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

回到顶部