Скопировать ячейки с текстом и цветом шрифта с помощью openpyxl?

Я пытаюсь скопировать несколько ячеек с цветными шрифтами с одного листа на другой, используя openpyxl. Ячейка A1 окрашена только в цвет, а ячейка A2 имеет цвет насыщенного текста (поэтому окрашена только часть ячейки)

Используя следующий код:

import openpyxl as ox
import os
import sys

path = os.path.abspath(os.path.dirname(sys.argv[0])) 
fn = os.path.join(path, "test.xlsx")
wb = ox.load_workbook(fn, rich_text=True)
ws = wb["input"]
wsOut = wb["output"]

cell1 = ws["A1"]
cell1NEW = wsOut["A1"]
cell1NEW.value = cell1.value

cell1 = ws["A2"]
cell1NEW = wsOut["A2"]
cell1NEW.value = cell1.value

wb.save("test.xlsx")

Но когда я запускаю код, только ячейка A2 скопирована правильно. Для ячейки А1 копируется только текст – без раскраски/стиля.

Как я могу скопировать цвет (стиль) для обеих ячеек?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Excel хранит настройки шрифтов на двух уровнях.

Сам стиль ячейки может иметь настройки шрифта. Это применимо ко всему содержимому ячейки.

Ячейка может содержать форматированный текст, который состоит из текстовых фрагментов с настройками шрифта для каждого текстового фрагмента.

В вашем примере ячейка A1 имеет настройки шрифта стиля ячейки, который устанавливает синий цвет шрифта и специальный размер шрифта. Содержимое ячейки само по себе представляет собой не форматированный текст, а только обычный текст «col».

В ячейке A2 есть настройки шрифта стиля ячейки, который устанавливает только специальный размер шрифта. И он содержит форматированный текст, где текстовая строка «ТЕКСТ» имеет специальный цвет и размер шрифта. Настройки шрифта стиля ячейки применяются к тексту «AAA», тогда как форматированный текст отображается только как «ТЕКСТ».

Cell.value получает или устанавливает форматированный текстовый контент, если он включен.

Cell.font получает или устанавливает настройки шрифта стиля ячейки (вся ячейки).

Таким образом, вам также необходимо установить Cell.font:

...
from copy import copy
...
cell1 = ws["A1"]
cell1NEW = wsOut["A1"]
cell1NEW.value = cell1.value
cell1NEW.font = copy(cell1.font)

cell1 = ws["A2"]
cell1NEW = wsOut["A2"]
cell1NEW.value = cell1.value
cell1NEW.font = copy(cell1.font)
...

Чтобы сделать Cell.font копией шрифта другой ячейки, необходимо использовать copy (из from copy import copy), поскольку для Cell.font не существует специального установщика. Установщик по умолчанию не сможет использовать простое присваивание =.

спасибо за ваш ответ - 2 вопроса: 1) Почему эта копия() необходима и почему простое присвоение с = невозможно 2) Оператор копирования для ячейки A2 не нужен, потому что ее форматированный текст - правильно? (кроме того, в вашем коде есть небольшая опечатка - это ячейка1NEW, а не ячейка NEW

Rapid1898 20.05.2024 13:43

@ Rapid1898: 1): посмотрите мои добавки; 2): Это необходимо для текстовой части «AAA», которая не является форматированным текстом. Опечатка исправлена.

Axel Richter 20.05.2024 14:08

Другие вопросы по теме

Похожие вопросы