2012-02-23 7 views
1

列の1つに値「資産」が含まれている場合、行全体を強調表示するスタイルを適用しようとしています。以下のコードでは、行全体ではなく、「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

あなたは自分のコメントにしたがって動作しないという回答をなぜ受け入れましたか? –

答えて

1

あなたの主な問題は、行にいくつかのセルを書き込んだ後、コードが "Assets"をチェックしていることです。 の前にの行のセルを書き込む前に、「行全体に使用するスタイル」テストを行う必要があります。 xlwt オブジェクトのスタイルを設定することはできません。これは、のデフォルトのです。それ以外のフォーマットが適用されていないセルで使用するスタイルです。

その他の問題:

は値 "資産" が含まれています。下のコードでは、「資産」を含む 列のみがハイライトされます

これはあいまいです。セルの値が「Equity Assets」と正確に等しいとします。何をしたいですか?注:コードでは、そのようなセルとそのセルが強調表示されます。また、 "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機能についての好奇心を...私はこの使用したい:

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

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

を自動的につながります

また、数字に異なるスタイルを使用する必要があるかどうかという疑問も生じます。 dテキスト。

関連する問題