使用xlwt在Excel中冻结单元格

我正在创build工作表,而不是命名他们任何东西。 我无法冻结第一列和第一行。 当我将它添加到工作簿时,我厌倦了命名该工作表并且工作。 然而,在飞行中不起作用。 下面是代码

base = xlwt.Workbook() for k,v in MainDict.items(): base.add_sheet(k.upper()) col_width = 256 * 50 xlwt.add_palette_colour("custom_colour", 0x21) pattern = 'url:(.*)' search = re.compile(pattern) base.set_colour_RGB(0x21, 251, 228, 228) style = xlwt.easyxf('pattern: pattern solid, fore_colour custom_colour;font : bold on;alignment: horiz center;font: name Times New Roman size 20;font:underline single') index = MainDict.keys().index(k) ws = base.get_sheet(index) ws.set_panes_frozen(True) try: for i in itertools.count(): ws.col(i).width = col_width except ValueError: pass style1 = xlwt.easyxf('font: name Times New Roman size 15') style2 = xlwt.easyxf('font : bold on;font: name Times New Roman size 12') col=0 for sk in MainDict[k].keys(): ws.write(0,col,sk.upper(),style) col+=1 row =1 for mk in MainDict[k][sk].keys(): for lk,lv in MainDict[k][sk][mk].items(): for items in lv: text = ('%s URL: %s')%(items,lk) links =('No data Found. Please visit the URL: %s')% (lk) url = re.findall(pattern,text) if len(items) != 0: if re.match(pattern,text)==True: ws.write(row,col-1,url,style2) else: ws.write(row,col-1,text,style1) row+=1 else: ws.write(row,col-1,links,style2) #ws.Column(col-1,ws).width = 10000 row+=1 default_book_style = base.default_style default_book_style.font.height = 20 * 36 base.save('project7.xls') 

你必须使用

  ws.set_panes_frozen(True) ws.set_horz_split_pos(1) ws.set_vert_split_pos(1) 

使冻结生效。

这个不工作的原因可能是get_sheet()函数的结果,而是将add_sheet()调用存储到“ws”中并使用:

 #base.add_sheet(k.upper()) ws = base.add_sheet(k.upper()) 

然后你需要这个属性序列来冻结最上面一行:

 #ws = base.get_sheet(index) #ws.set_panes_frozen(True) ws.set_horz_split_pos(1) ws.set_vert_split_pos(1) ws.panes_frozen = True ws.remove_splits = True 

我testing了这个使用你的代码片段,它在我的结束。

作为参考,您可以通过函数或赋值来设置这些属性:

 ws.set_panes_frozen(True) ws.set_remove_splits(True)