Как python может копировать значение ячеек excel вместе с его цветом, уравнением и т. д.

искал и пробовал, пока не нашел решения...

1. используйте openpyxl

e.g.: ws_to.cell(row1, column1).value = ws_from.cell(row2,column2).value

2. используйте win32com.client

e.g.: 

xlsSheet.Cells(row1, column1).Value = xlsSheet.Cells(row2, coloum2).Value

Оба модуля выше не смогли скопировать ячейки, сохранив свой цвет и уравнение.

Есть ли более надежный модуль, который поможет мне сохранить цвет и формулу при копировании ячеек?


person California_desert    schedule 30.12.2013    source источник
comment
.Value будет принимать только значение, без какого-либо форматирования. Найдите другие свойства (или посмотрите, можете ли вы использовать эти библиотеки без .value) и посмотрите, что они копируют.   -  person SeanC    schedule 30.12.2013
comment
Взгляните на заголовок stackoverflow.com/questions/11848986/   -  person manuell    schedule 02.01.2014
comment
Ни один из ответов не подошел?   -  person Oliver    schedule 30.01.2017


Ответы (3)


С win32com.client вы можете использовать Range.Copy(destination):

xlsSheet.Cells(row2, column2).Copy(xlsSheet.Cells(row1, column1))

Это копирует все, как если бы вы делали ctrl-c ctrl-v (значение, форматирование и т. д.).

person Oliver    schedule 08.02.2014
comment
Любой способ сделать это с openpyxl? - person Jean-Francois T.; 30.01.2017
comment
@Жан-ФрансуаТ. уже есть ответ, как это сделать с openpyxl - person Oliver; 30.01.2017
comment
Действительно, странно, что я этого не видел. Спасибо. - person Jean-Francois T.; 30.01.2017

С openpyxl вы можете сделать это так:

# With openpyxl 1.8:
#  Make sure you're loading with load_workbook('file.xlsx', data_only=False)
#  Note: this behavior may be changing with openpyxl 1.9 in the future

# First, copy the value
ws_to.cell(row1, column1).value = ws_from.cell(row2,column2).value

# Second, copy the style
# Styles are stored in a table on the worksheet, you can directly copy there
# Also, set the static flag, so it knows the style is shared
# And will make a copy if you edit the style on the cell afterwards
from_style = ws_from.cell(row2,column2).style
to_coord = ws_to_cell(row1, column1).get_coordinate()
from_style.static = True  # Means the style is shared, usually only set when reading a file
ws._styles[to_coord] = from_style
person Adam Morris    schedule 25.02.2014
comment
Это to_coord = ws_to_cell или to_coord = ws_to.cell.)? - person Jean-Francois T.; 30.01.2017

Используя openpyxl 2.3.5, это успешно копирует одну ячейку в другую, включая цвет/уравнения:

to_cell = ws_to.cell(row1, column1)
from_cell = ws_from.cell(row2,column2)

to_cell.value = from_cell.value
to_cell.style = from_cell.style
person Abate    schedule 01.09.2016