OpenPyXL устанавливает number_format для всего столбца - PullRequest
0 голосов
/ 26 мая 2020

Я экспортирую некоторые данные в Excel и успешно реализовал форматирование каждой заполненной ячейки в столбце при экспорте в файл Excel следующим образом:

import openpyxl
from openpyxl.utils import get_column_letter

wb = openpyxl.Workbook()
ws = wb.active

# Add rows to worksheet
for row in data:
    ws.append(row)

# Disable formatting numbers in columns from column `D` onwards
#   Need to do this manually for every cell
for col in range(3, ws.max_column+1):
    for cell in ws[get_column_letter(col)]:
        cell.number_format = '@'

# Export data to Excel file...

Но это только форматирует заполненные ячейки в каждом столбце . Другие ячейки в этом столбце все еще имеют форматирование General.

Как мне установить все пустые ячейки в этом столбце как @, чтобы любой, кто будет редактировать ячейки в этих столбцах в этом экспортированном файле Excel, смог не будет проблем со вставкой, скажем, номера телефонов как настоящие.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Поскольку вы выполняете итерацию по строкам этих столбцов только до max_cell, это единственные ячейки, которые переформатируются. Хотя вы не можете переформатировать столбец, вы можете использовать другой способ установить формат, по крайней мере, для указанной c ячейки:

last_cell = 100

for col in range(3, ws.max_column+1):
    for row in range(1, last_cell):
        ws.cell(column=col, row=row).number_format = '@'  # Changing format to TEXT

Следующее отформатирует всю ячейку в столбце до last_cell вы можете использовать это, и, хотя это не совсем то, что вам нужно, оно достаточно близко.

1 голос
/ 26 мая 2020

Для openpyxl вы всегда должны устанавливать стили для каждой ячейки индивидуально. Если вы установите их для столбца, тогда Excel будет применять их при создании новых ячеек, но стили всегда по-прежнему применяются к отдельным ячейкам.

...