2012-02-23 82 views
1

我想应用一个样式,如果其中一列包含值“Assets”,将突出显示整行。下面的代码将仅突出显示其中包含“Assets”的列,而不是整行。有没有办法将风格应用于整行?如何使用XLWT Python Excel将样式应用于整行?

for row in csv_input: 
    #Iterate through each column 
     for col in range(len(row)): 
      #Apply different styles depending on row 
      if row_count == 0: 
       sheet.write(row_count,col,row[col],headerStyle) 
      elif row_count == 3: 
       sheet.write(row_count,col,row[col],subheadStyle) 
      elif "Assets" in row[col]: 
       sheet.write(row_count,col,row[col],highlightStyle)    
      else: 
       if (is_number(row[col]) == True): 
        sheet.write(row_count,col,float(row[col]),rowStyle) 
       else: 
        sheet.write(row_count,col,row[col],rowStyle) 

正如您所看到的,根据行我应用不同的样式。我如何做到这一点,以便包含关键字“资产”的任何行都将突出显示?谢谢!

+0

你为什么接受根据你自己的意见不起作用的答案? – 2012-03-03 21:19:25

回答

1

您的主要问题是您的代码在行中写入了一些单元格后正在检查“资产”。您需要在之前,在行中写入任何单元格,然后执行“整行使用什么样式”的测试。在xlwt 对象上设置样式不起作用;这是默认风格,用于与其他格式不适用的单元格一起使用。

其他问题:

包含值 “资产”。下面的代码将仅突出显示 列中包含“Assets”的列

这是不明确的。假设一个单元格值恰好等于“权益资产”;您想做什么?注意:你的代码将突出显示这样一个单元格和其右侧的单元格。此外,“资产”承载单元应该是第一个(例如在您对另一个答案的评论中的例子)还是任何单元(根据您的代码)并不明确。

您对变量名称的某些选择会使您的代码非常难以阅读,例如, row是单元格值列表,但col是列索引。尽可能使用enumerate()

尝试这样:

for row_index, cell_values in enumerate(csv_input): 
    # Determine what style to use for the whole row 
    if row_index == 0: 
     common_style = headerStyle 
    elif row_index == 3: 
     common_style = subheadStyle 
    elif "Assets" in cell_values: 
     # perhaps elif any("Assets" in cell_value for cell_value in cell_values): 
     # perhaps elif cell_values and cell_values[0] == "Assets": 
     # perhaps elif cell_values and "Assets" in cell_values[0]: 
     common_style = highlightStyle 
    else: 
     common_style = rowStyle 
    # Iterate over the columns 
    for col_index, cell_value in enumerate(cell_values): 
     if common_style == rowStyle and is_number(cell_value): 
      cell_value = float(cell_value) 
     sheet.write(row_index, col_index, cell_value, common_style) 

我很好奇is_number功能......我会用这样的:

def is_number(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

这将自动导致:

 if common_style == rowStyle: 
      try: 
       cell_value = float(cell_value) 
      except ValueError: 
       pass 

也提出了一个问题,即你是否应该有不同的数字风格d文本。

相关问题