75147


下記のxlsxファイルからデータを抽出し、  
xlsxファイルと同様にB列”個”、C列をパーセント表示にしたいです。  
`col.number_format = "0.0%"`の形式で指定しましたが、結果の通りに何も変換されないです。

xlsxのデータ

[code]

     A       B     C         
    アメリカ  1234個  66.7%　 
    カナダ　 1234個　4.9%
    
[/code]

code

[code]

    import openpyxl
    from openpyxl.utils import column_index_from_string
    
    wb = openpyxl.load_workbook('test.xlsx',data_only=True)
    ws = wb.worksheets[0]
    
    
    for row in ws["A1:C2"]:
        values = []
        for col in row:
            values.append(col.value)
            col.number_format = openpyxl.styles.numbers.FORMAT_NUMBER
            col.number_format = "0.0%"
        print(values)
    
[/code]

結果

[code]

    [' ', 'A', 'B', 'C']
    ['アメリカ', 1234, 0.6666666666666666]
    ['カナダ', 1234, 0.04938271604938271]
    
[/code]

理想の結果

[code]

    ['A',    'B', 'C']
    ['アメリカ', 1234個, 66.7%]
    ['カナダ', 1234個, 4.9%]
    
    
[/code]

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。


CC BY-SA 4.0
2021-04-07T08:07:00.997
75140
2021-04-07T11:20:38.213
2021-04-07T08:24:47.640
18859
18859
question
python excel
XLSXデータの形式を変換したい


`col.number_format` や `col.style`
を変更しても内部の数値表現形式には反映されないので、スクリプト内で計算してしまうと良いかと思います。

[code]

    import openpyxl
    
    wb = openpyxl.load_workbook('test.xlsx', data_only=True)
    ws = wb.worksheets[0]
    
    for row in ws["A1:C2"]:
      values = []
      for col in row:
        if col.column_letter == 'C':
          col.value = f'{col.value*100:.1f}%'
        values.append(col.value)
      print(values)
    
    =>
    ['アメリカ', '1234個', '66.7%']
    ['カナダ', '1234個', '4.9%']
    
[/code]


CC BY-SA 4.0
2021-04-07T11:20:38.213
75147
2021-04-07T11:20:38.213
75140
answer