Я работаю с файлами XLSX с поворотными текстами и пишу script, чтобы проанализировать их на новый файл за вкладку.
Так как openpyxl не поддерживает сводные таблицы по умолчанию, мне нужно выполнить некоторую работу, чтобы повторно вставить "стиль" поворота, который теряется во время копирования.
Для этого я повторяю каждую строку и столбец, ища значение Total
в столбце 0. После этого строка должна измениться на все 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 стилей. Я запустил еще одно очень простое редактирование и получил странное поведение.
Если у нас есть простой макет с жирным/нежирным ячеек. Затем мы запускаем эту простую команду для изменения одной ячейки:
>>> new_wb.worksheets[0].cell(row=10,column=0).style.font.bold = False
Выход изменяется для всего столбца, а не только для ячейки.