如何在xlsxwriter Python中为整个行或列设置格式?

9
workbook = xlsxwriter.Workbook('demo1.xlsx')
worksheet = workbook.add_worksheet()
format = workbook.add_format({ 'bg_color': '#5081BB','font_color': '#FFFFFF','font_size': 12,'text_wrap':'true'})
textWrap = workbook.add_format({'text_wrap':'true'})
col = 0
row = 0
for i in data["tabledata"]:
    for j in i:
        worksheet.write(row, col, j,textWrap)
        col = col+1
    row = row+1
    col = 0
worksheet.set_row(0, 20, format)
worksheet.set_row(1, 20, format)
workbook.close()

如果这些功能不能正常工作,那么set_rowset_column有什么用?如何为特定的行/列应用格式?我还需要为日期列应用日期格式。
worksheet.set_column(7, none, Dateformat)
4个回答

4

XlsxWriter中的格式化与Excel类似:单元格格式会覆盖行格式,而行格式又会覆盖列格式。

所以,如果您想让一个单元格既具有特定的格式又与行或列具有相同的格式,则需要定义一个包含所有所需格式的格式对象。


我使用“worksheet.set_row(0, 20, format)”它不起作用。这是设置整行格式的方法吗?通常我会为每个单元格而不是每个单元格进行格式化,如何为整行添加格式? - Mj.
从代码上看,set_row()格式被单独调用的write()覆盖了。正如我之前在Excel中所说,单元格格式优先于行格式。如果您想要结合行和单元格格式的格式,则需要创建一个具有两者属性的新格式。 - jmcnamara
“像在Excel中一样”是什么意思?在Excel中,我可以将B列格式化为%,将第2行设置为粗体;然后单元格B2将同时是粗体和%。如果我尝试使用xlsxwriter做同样的事情,单元格B2将会是粗体,但不是%,而B列中的所有其他单元格都将是%。有没有办法获得与Excel相同的结果? - Pythonista anonymous
在您所描述的情况下,Excel会创建第三种格式,即行和列格式的组合,并将其应用于单元格。用户可以在XlsxWriter中执行相同的操作。但是,这不会自动发生。 - jmcnamara

2
为了补充jmcnamara的答案,仅创建格式的深度拷贝并修改是不够的。
import xlsxwriter
import copy

wb = xlsxwriter.Workbook('test.xlsx')
default = wb.add_format({'bg_color': 'yellow'})

ws = wb.add_worksheet()
ws.set_row(0, None, default)

ws.write_string(0, 0, 'default format')

fmt = copy.deepcopy(default)
fmt.set_bold()
ws.write_string(0, 1, 'bolded and yellow', fmt)

wb.close()

上面的代码会产生以下结果:

不起作用

看起来你必须使用Workbook.add_format方法来创建一个新的格式。将

fmt = copy.deepcopy(default)
fmt.set_bold()

使用

fmt = wb.add_format({'bg_color': 'yellow', 'bold': True})

工作原理:

工作原理


2

我的代码:

workbook = xlsxwriter.Workbook('demo1.xlsx')
worksheet = workbook.add_worksheet()
format = workbook.add_format({ 'bg_color': '#5081BB','font_color': 
'#FFFFFF','font_size': 12,'text_wrap':'true'})
textWrap = workbook.add_format({'text_wrap':'true'})

worksheet.set_column('B:B', 18, format)       //format formatting apply to entire B column
worksheet.set_column('C:C', None, textWrap)   //textWrap formatting apply to entire C column

2
如果我需要对某一列中特定行数的数据应用格式,例如从A5:A100,那么该如何实现? - Seema Mudgil

0
根据Seema的问题,我使用了(非)条件格式化来实现这一点,它接受单元格范围作为参数,无论单元格中的值是什么,它都会始终应用number_format并覆盖列和行格式。
``worksheet0.conditional_format('J3:V22', {
    'type': 'cell',
    'criteria': '<',
    'value': 0, 'format': number_format
        }
    )

worksheet0.conditional_format('J3:V22', {
    'type': 'cell',
    'criteria': '>=',
    'value': 0, 'format': number_format
    }
)``

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接