Используйте openpyxl для редактирования файла Excel2007 (.xlsx) без изменения своих собственных стилей? - PullRequest
13 голосов
/ 21 июля 2011

У меня есть файл .xlsx для редактирования, я обнаружил, что openpyxl может манипулировать файлами Excel 2007.Я только хочу изменить значение в некоторых ячейках и оставить другие настройки без изменений.

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

Я попробовал ниже способ изменить существующий файл, но после того, как я сохранил его, стили в файле были удалены (как шрифты, цвета):

from openpyxl.reader.excel import load_workbook
wb=load_workbook(r'd:\foo1.xlsx')
ws=wb.get_sheet_by_name('Bar')
ws.cell('A1').value= 'new_value'
# save the workbook to a new file to finish the editing
# but the style settings has been removed (such like font, color) in the new file
wb.save(r'd:\foo2.xlsx')

Ответы [ 3 ]

14 голосов
/ 22 июля 2011

Теперь openpyxl не может обрабатывать стили достаточно хорошо, поэтому я попытался использовать pywin32 COM и нашел решение.Вот хорошая python-excel-mini-cookbook для использования pywin32 COM для Excel

1 голос
/ 21 июля 2011

Стили еще не полностью поддерживаются в openpyxl.Убедитесь, что вы используете последнюю версию (на данный момент 1.5.3), поскольку она недавно улучшила свои возможности стилей.

xlwt имеет более полное форматирование для файлов .xls, нопока не поддерживает xlsx.

0 голосов
/ 19 января 2017

Попробуйте следующий код, создавая экземпляр следующего класса:

из openpyxl import load_workbook

Класс для управления данными Excel с openpyxl

class Copy_excel:
def __init__(self,src):
    self.wb = load_workbook(src)
    self.ws = self.wb.get_sheet_by_name("Sheet1")
    self.dest="destination.xlsx"

#Write the value in the cell defined by row_dest+column_dest         
def write_workbook(self,row_dest,column_dest,value):
    c = self.ws.cell(row = row_dest, column = column_dest)
    c.value = value

#Save excel file
def save_excel(self) :  
    self.wb.save(self.dest)

Никогда не сдавайся !!!

...