2011-07-21 12 views
12

Mam plik .xlsx do edycji, znalazłem openpyxl może manipulować plikami programu Excel 2007. Chcę zmienić wartość tylko w niektórych komórkach i pozostawić inne ustawienia bez zmian.Użyj openpyxl do edycji pliku Excel2007 (.xlsx) bez zmiany własnych stylów?

Po przejrzeniu Documentation nie mogę znaleźć przykładów do edycji istniejącego pliku. Demostrował tylko czytanie pliku .xlsx i pisanie do nowego.

Próbowałem poniżej sposób edytować istniejący plik, ale po zapisaniu go, style w pliku została usunięta (np czcionek, kolorów):

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') 

Odpowiedz

13

Teraz openpyxl nie radzi sobie z stylami wystarczająco dobrze, więc próbowałem używać pywin32 COM i otrzymałem rozwiązanie. Oto dobry python-excel-mini-cookbook używać pywin32 COM dla programu Excel

+3

Ładny link! Jeśli kiedykolwiek przejdzie w tryb offline, oto treść o tej samej treści: https://gist.github.com/airstrike/5469478 –

1

Style nie są jeszcze w pełni obsługiwane w openpyxl. Upewnij się, że używasz latest version (1.5.3 jak na razie), ponieważ ostatnio poprawiono jej możliwości stylu.

Plik xlwt ma pełniejsze formatowanie plików .xls, ale nie obsługuje jeszcze wersji xlsx.

+0

Tak, używam wersji 1.5.3, więc wydaje się, że nie ma teraz dobrej drogi. Czy "COM z pywin32" działa? – Xiao

+1

COM podobno działa - i wykorzystuje natywny interfejs pakietu Office. Nie próbowałem go jednak, ponieważ działa tylko w systemie Windows. Powodzenia z tym! –

+0

Czy style są w stanie zachować po aktualizacji kolumny nową wersją? – conandor

-3

Spróbuj następujący kod tworzenia instancji następujących klas:

od openpyxl importowej load_workbook

klasy do zarządzania danymi programu Excel z 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) 

Nigdy się nie poddawaj !!!

+0

To nie odpowiada na pytanie. – matt2000

+0

Tak, w tej klasie możesz edytować plik Excela bez zmiany stylu arkusza – Heisenberg