Подтвердить что ты не робот

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

У меня есть файл .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')
4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

из 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)

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