私はピボットテーブルの XLSX ファイルを扱っており、それらを解析してタブごとに新しいファイルにするスクリプトを書いています。
デフォルトでは、openpyxl はピボット テーブルをサポートしていないため、コピー中に失われたピボットの「スタイル」を再挿入するためにいくつかの作業を行う必要があります。
これを行うには、各行と列を反復処理してTotal
、列 0 の値を探します。見つかったら、行は all に変更されますbold=True
。
代わりに、最初のNone
. 私のprint('bolding totals')
メッセージは、各行/セルを正しく評価していることを示しています。おそらく、私は頭が悪く、ループのくぼみを台無しにしていますか?
from openpyxl import Workbook
from openpyxl import load_workbook
from copy import deepcopy
wb = load_workbook(filename=r'input.xlsx')
# Print 1
sheetlist = wb.get_sheet_names()
print(sheetlist)
for i in range(len(sheetlist)-1):
dest_filename = r''+sheetlist[i]+'.xlsx'
new_wb = Workbook()
ws = wb.get_sheet_by_name(sheetlist[i])
new_wb.add_sheet(ws, 0)
for k in range(0, new_wb.worksheets[0].get_highest_row()):
print(new_wb.worksheets[0].cell(row=k, column=0).value)
# ignore empty cells
if new_wb.worksheets[0].cell(row=k, column=0).value is not None:
if 'Total' in new_wb.worksheets[0].cell(row=k, column=0).value:
for j in range(0, new_wb.worksheets[0].get_highest_column()):
print('bolding totals, '+str(k), str(j))
new_wb.worksheets[0].cell(
row=k, column=j).style.font.bold = True
elif 'Total' not in new_wb.worksheets[0].cell(row=k, column=0).value:
for j in range(0, new_wb.worksheets[0].get_highest_column()):
print('not bolding anything')
new_wb.worksheets[0].cell(
row=k, column=j).style.font.bold = False
# remove the blank sheet created in new_wb by openpyxl
new_wb.remove_sheet(new_wb.get_sheet_by_name('Sheet'))
print(new_wb.get_sheet_names())
new_wb.save(dest_filename)
break # set to break after one sheet for testing
print('finished')
この時点で、これはスタイルの openpyxl 処理のバグであると思われます。別の非常に単純な編集を実行したところ、奇妙な動作が発生しました。
太字/非太字のセルを含む単純なレイアウトがある場合。次に、この単純なコマンドを実行して、1 つのセルを変更します。
>>> new_wb.worksheets[0].cell(row=10,column=0).style.font.bold = False
セルだけではなく、列全体の出力が変化します。